64

我正在使用 LINQPad 在我正在构建的应用程序中创建 LINQ 查询。

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

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 快速构建 LINQ 语句,然后我可以将它们复制回我的应用程序中?

4

4 回答 4

106

如果您在 LINQPad 的代码编辑器中单击鼠标右键并选择 Advanced Query Properties,则会出现两个对话框:Additional References 和 Additional Namespace Imports。

1) 在Additional References中,选择Add然后单击Browse并导航到您的自定义程序集。

2) 然后,在Additional Namespace Imports中,键入要从该程序集导入的命名空间。

于 2009-08-03T12:36:19.937 回答
10

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

于 2009-08-03T12:24:33.460 回答
4

实际上,如果您使用记事本查看诸如 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 文件中找到有关 LINQPad 如何获取所有信息、构建动态程序集并在内部运行它以将结果返回到其 UI 的更多详细信息。

顺便说一句,我昨晚写了一篇关于这个工具的博客以及我对它的结构的理解:LINQPad a .Net Snippet Code IDE

于 2009-09-18T14:26:37.817 回答
2

Edward,我们在构建 LINQ in Action 示例时使用了多种策略。在数据库章节中,我们经常只是依赖 LINQPad 的能力,它可以根据数据库表自动生成类。

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

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

在几个示例中,特别是在我们演示自定义扩展方法的地方,我们不得不做另一个技巧,强制生成的上下文类完成(添加一个明显不匹配的结尾 } 或 End Class),然后开始一个新类,但省略它正在关闭结束大括号/结束类。您可以在下载的示例中的示例 2.16 中看到这一点。

于 2011-06-13T13:51:35.243 回答