Linq to Entities - 针对查询语法与方法语法的预测

Ada*_*kis 2 c# linq-to-entities linq-to-sql entity-framework-4

由于LINQ查询表达式被"翻译"以调用相应方法查询将调用的相同方法(至少我认为是这样),我希望这两个查询返回相同的类型.出于某种原因,尽管如此:

var result = from i in db.Invoices
             select new { i.InvoiceNum };
Run Code Online (Sandbox Code Playgroud)

将结果设置为IQueryable<'a>每个具有InvoiceNum属性的成员,同时这样

IQueryable<string> result2 = db.Invoices.Select(i => i.InvoiceNum);
Run Code Online (Sandbox Code Playgroud)

足够聪明回归IQueryable<string>(显然,因为编译)

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

(这是EF4,但是对于linq到对象也是如此,我猜测L2S也会发生同样的情况)

Die*_*res 5

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

尝试

var result = from i in db.Invoices
             select i.InvoiceNum;
Run Code Online (Sandbox Code Playgroud)

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