基本的LinqToSql问题:为什么不编译?

Mat*_*nde 4 c# linq-to-sql

我最近通过一个制作简单的项目向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如何运作的误解,但如果有人可以帮助我,我会很感激.

Sas*_*cha 8

db.Territories返回一个表对象.因此'var'的类型为System.Data.Linq.Table.稍后您尝试(基于某些条件)将类型System.Linq.IQueryable分配给变量.由于.NET是强类型的,因此编译器会抛出错误.

var类型的变量在首先分配时将被赋予类型.这就是我试图记住自己的方式.


Mar*_*ell 7

对于这种类型的累积Where,您需要告诉编译器使用IQueryable<T>:

IQueryable<Territory> territories = db.Territories;
if (someCondition)
    territories = territories.Where(t => t.PendingUserCount > 0);
... etc
Run Code Online (Sandbox Code Playgroud)


lep*_*pie 5

替代方案:

var territories = db.Territories.AsQueryable();
if (someCondition)
    territories = territories.Where(t => t.PendingUserCount > 0);
Run Code Online (Sandbox Code Playgroud)