我最近通过一个制作简单的项目向LinqToSQL介绍自己.我很好奇为什么会这样:
var territories = db.Territories.Where(t => t.PendingUserCount > 0);
Run Code Online (Sandbox Code Playgroud)
但这会导致编译错误:
var territories = db.Territories;
if (someCondition)
territories = territories.Where(t => t.PendingUserCount > 0);
// Cannot implicitly convert 'System.Linq.IQueryable<Territory> to System.Data.Linq.Table<Territory>
Run Code Online (Sandbox Code Playgroud)
我也试过打电话db.Territories.ToList(),但无济于事.
我确信这只是对Linq如何运作的误解,但如果有人可以帮助我,我会很感激.
db.Territories返回一个表对象.因此'var'的类型为System.Data.Linq.Table.稍后您尝试(基于某些条件)将类型System.Linq.IQueryable分配给变量.由于.NET是强类型的,因此编译器会抛出错误.
var类型的变量在首先分配时将被赋予类型.这就是我试图记住自己的方式.
对于这种类型的累积Where,您需要告诉编译器使用IQueryable<T>:
IQueryable<Territory> territories = db.Territories;
if (someCondition)
territories = territories.Where(t => t.PendingUserCount > 0);
... etc
Run Code Online (Sandbox Code Playgroud)
替代方案:
var territories = db.Territories.AsQueryable();
if (someCondition)
territories = territories.Where(t => t.PendingUserCount > 0);
Run Code Online (Sandbox Code Playgroud)