LINQ查询除了不工作外,List <long?> vs. List <long>

Jor*_*man 4 .net c# linq asp.net linq-to-sql

我正在尝试做的是缩小我稍后将用于数据绑定的查询结果.我希望得到我的gridview中使用的所有ProgramId,并将其从我的下拉列表的数据源中删除(即,这样用户就不能选择创建对象并将其插入到同一ProgramId的gridview中.存在)

这是一些代码:

var query = from goals in DataContext.Goals
            select goals;
var query2 = (from goals in query.AsEnumerable()
              select goals.ProgramId).ToList(); //List<long?>
var query3 = (from progs in DataContext.Programs
              select progs.ProgramId).ToList(); //List<long>
var cgps = query3.Except(query2);
Run Code Online (Sandbox Code Playgroud)

我收到这些错误var cgps = query3.Except(query2);:

错误29'System.Collections.Generic.List'不包含'Except'的定义和最佳扩展方法重载'System.Linq.ParallelEnumerable.Except(System.Linq.ParallelQuery,System.Collections.Generic.IEnumerable)'有一些无效的论点C:...\Shmeh\Shmeh\Shmeh\this.aspx.cs 24 226项目

错误30实例参数:无法从'System.Collections.Generic.List'转换为'System.Linq.ParallelQuery'C:...\Shmeh\Shmeh\Shmeh\this.aspx.cs 24 226项目

如果你有任何想法如何有效地做我想做的事,任何帮助将不胜感激!谢谢!

bdu*_*kes 9

Except要求序列都是相同的类型.尝试将long列表转换为long?:

var query3 = (from progs in DataContext.Programs
              select (long?)progs.ProgramId).ToList(); //List<long?>
Run Code Online (Sandbox Code Playgroud)


bdo*_*den 5

您收到此错误的原因long?与类型不同long. Except要求两个可枚举对象具有相同的类型.

你可以做的是从query2中删除空值并将ProgramId转换为 long

var query2 = (from goals in query.AsEnumerable()
              where goals.ProgramId.HasValue
              select goals.ProgramId.Value).ToList()
Run Code Online (Sandbox Code Playgroud)