开发者

Linq to Entities - Projections against Query Syntax vs Method Syntax

Since LINQ query expression are translated "under the covers" to call the same methods that a corresponding method query would call (at least I think so), I would expect these two queries to return the same type. For some reason though this:

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

sets result as an IQueryable<'a> with each member having an InvoiceNum property, while this

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

Is s开发者_Go百科mart enough to return IQueryable<string> (obviously, since that compiles)

Clearly one of my assumptions is wrong, and I was hoping an expert could help me understand a bit better.

(this is EF4, but the same happens with linq-to-objects, and I'm guessing the same would also happen with L2S)


When you write new { } you are creating an anonymous type

try

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

and you will see that it returns the type you expect.


those are not the same, the first one is returning anonymousn type, to make them the same you need to have th first one as:

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


In your first statement, you create an anonymous type with one property named "InvoiceNum". This happens because you use the new { } syntax. That anonymous type is not a String. The equivalent method syntax would be:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜