LINQPad如何引用其他类,例如LINQ in Action示例中的书籍

我正在使用LINQPad在我正在build立的应用程序中创buildLINQ查询。

我注意到,在下载的LINQ in Action示例中,例如4.04,intellisense显示了一个“Books”类,但在LINQPad工具中没有看到任何引用或“ using ”语句,下面是示例:

List<Book> books = new List<Book>() { new Book { Title="LINQ in Action" }, new Book { Title="LINQ for Fun" }, new Book { Title="Extreme LINQ" } }; var titles = books .Where(book => book.Title.Contains("Action")) .Select(book => book.Title); titles.Dump(); 

在“LinqBooks.Common,Business Objects, Book.linq ”这个类似乎被定义的地方:

 public class Book { public IEnumerable<Author> Authors {get; set;} public String Isbn {get; set;} public String Notes {get; set;} public Int32 PageCount {get; set;} public Decimal Price {get; set;} public DateTime PublicationDate {get; set;} public Publisher Publisher {get; set;} public IEnumerable<Review> Reviews {get; set;} public Subject Subject {get; set;} public String Summary {get; set;} public String Title {get; set;} public String Test {get; set;} public override String ToString() { return Title; } } 

但是,这是如何工作的,以便我可以复制我的课程,并使用LINQPad快速build立LINQ语句,然后我可以复制回我的应用程序?

如果在LINQPad中的代码编辑器中右键单击并select高级查询属性,则有两个对话框:其他引用和其他名称空间导入。

1)在其他引用中 ,select添加,然后单击浏览并导航到您的自定义程序集。

2)然后,在其他名称空间导入中 ,键入要从该程序集导入的名称空间

LINQPad允许您通过“ 高级查询属性”对话框引用自定义程序集,该对话框可以通过按F4打开。

实际上,如果你用记事本来查看Book.linq这样的linq文件,你会发现这个文件是XML和一段代码的混合体:

 <Query Kind="Statements"> <!-- kind: Program, ... ---> <Connection>...</Connection> <!-- Optional, if you have connection to db --> <Reference>[path]\[library]</Reference> <!-- references to your customized libraries --> <Reference>RuntimeDirectory&gt;System.Data.dll</Reference> <!-- example to System.Data.dll --> <Namespace>System.Data</Namespace> <!-- here are nodes for namespaces... --> <Namespace>MyLibrary.Common</Namespace> </Query> var conn = "Data Source=..."; .... 

换句话说,您可以从示例linq文件中find更多关于LINQPad如何获取所有信息的详细信息,构build一个dynamic程序集并在内部运行以获取结果返回到其UI。

顺便说一下,我昨天晚上写了一个关于这个工具的博客,以及我对它的结构的理解: LINQPad .Net代码片段IDE 。

Edward,我们在构buildLINQ in Action示例时使用了许多策略。 在数据库章节中,我们经常仅仅依靠LINQPad根据数据库表自动生成类的能力。

在这里引用(4.04)的情况下,我们使用F4添加了对预编译类库的引用。 在LinqPad生成的类与Visual Studio生成的类不同的情况下,我们使用这种策略,从而导致上下文的行为与您预期的不同,特别是在更改跟踪方面。

在其他情况下,我们在样本的其余部分内嵌了一个嵌套类,并在代码编辑器中使用了“程序”选项。 见例6.02。 在这种情况下,我们实际上将Books类embedded到LinqPad生成的生成的DataContext类中。 当我们想要别名列名的时候,我们也使用了这个策略,因为LinqPad创build的自动生成的类不会轻易让我们在工具内部混叠这些列。

在一些示例中,特别是在展示自定义扩展方法的地方,我们必须做另一个强制生成的上下文类完成的技巧(添加一个无匹配的结尾)或者End Class),然后开始一个新的类,但省略它的closures末端括号/末class。 你可以在例子2.16中看到下载的样本。