我要做的是缩小查询结果的范围,稍后我将使用该查询来进行数据绑定。我想获取所有在GRIDVIEW中使用的程序,并将它们从DROPPDLIST列表的数据源中删除(也就是说,用户不能选择创建和插入一个对象到与已经存在的相同程序ID的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);

我在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 project
错误30实例参数:无法从“system.collections.generic.list”转换为“system.linq.parallelquery”C:…\shmeh\shmeh\shmeh\this.aspx.cs 24 226项目
如果你知道如何有效地做我想做的事,任何帮助都将不胜感激!谢谢!

最佳答案

Except要求序列是同一类型的。尝试将long列表转换为long?

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

09-06 12:05