由于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<string>
(显然,自编译以来)
显然,我的一个假设是错误的,我希望专家可以帮助我更好地理解。
(这是EF4,但是对于linq到对象也是如此,我猜测L2S也会发生同样的情况)
答案 0 :(得分:5)
当你写new { }
时,你正在创建一个匿名类型
试
var result = from i in db.Invoices
select i.InvoiceNum;
你会看到它返回你期望的类型。
答案 1 :(得分:2)
那些不一样,第一个是返回anonymousn类型,使它们与你需要的第一个相同:
var result = from i in db.Invoices
select i.InvoiceNum;
答案 2 :(得分:1)
在第一个语句中,您将创建一个匿名类型,其中包含一个名为“InvoiceNum”的属性。发生这种情况是因为您使用new { }
语法。那个匿名类型不是String。等效的方法语法是:
var result = db.Invoices.Select(i => new { i.InvoiceNum });