【问题标题】:Linq to Entities - Projections against Query Syntax vs Method SyntaxLinq to Entities - 针对查询语法与方法语法的预测
【发布时间】:2011-02-18 06:18:40
【问题描述】:

由于 LINQ 查询表达式在“幕后”被翻译为调用相应方法查询将调用的相同方法(至少我是这么认为的),我希望这两个查询返回相同的类型。出于某种原因:

var result = from i in db.Invoices
             select new { i.InvoiceNum };

将结果设置为IQueryable<'a>,每个成员都有一个InvoiceNum 属性,而这个

IQueryable<string> result2 = db.Invoices.Select(i => i.InvoiceNum);

足够聪明,可以返回IQueryable&lt;string&gt;(显然,因为它可以编译)

显然我的一个假设是错误的,我希望专家可以帮助我更好地理解。

(这是 EF4,但 linq-to-objects 也会发生同样的情况,我猜 L2S 也会发生同样的情况)

【问题讨论】:

    标签: c# linq-to-sql entity-framework-4 linq-to-entities


    【解决方案1】:

    当您编写 new { } 时,您正在创建一个匿名类型

    试试

    var result = from i in db.Invoices
                 select i.InvoiceNum;
    

    你会看到它返回了你期望的类型。

    【讨论】:

      【解决方案2】:

      那些不一样,第一个返回anonymousn类型,要使它们相同,您需要将第一个设置为:

      var result = from i in db.Invoices
               select i.InvoiceNum;
      

      【讨论】:

        【解决方案3】:

        在您的第一个语句中,您创建了一个具有一个名为“InvoiceNum”的属性的匿名类型。发生这种情况是因为您使用了new { } 语法。该匿名类型不是字符串。等效的方法语法是:

        var result = db.Invoices.Select(i => new { i.InvoiceNum });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-04-16
          • 1970-01-01
          • 2013-08-30
          • 1970-01-01
          • 2013-10-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多