无法使用LINQ比较两个列表

时间:2018-06-07 05:09:10

标签: c# linq lambda

我需要根据列值ListId比较两种Name类型。 List1namesidsList2也包含IdName和其他列。现在我想检查一个输入名称在方法中接收的条件。该名称在List2中不存在,但它可能存在于List1中。条件应验证List1 IdList2 Id不存在,而外部名称可能存在于List1中。我用下面的查询来实现这个目的。

var IsNameExists= db.List1.Where(a => List2.Any(b=>b.Id!=a.Id) && a.Name== InputName).ToList();

当我使用此查询时,我会遇到像

这样的异常

无法创建类型' ProjectName.DBEntities.List2'的常量值。在此上下文中仅支持原始类型或枚举类型。

我不确定我在查询中做错了什么。请指导我如何实现这一点来检查List1上的名称是否存在。

更正的查询和答案是:

var IsNameExists= db.List1.ToList().Where(a => !(List2.Select(x => x.Id).Contains(a.Id) && a.Name== InputName).ToList();

1 个答案:

答案 0 :(得分:1)

我猜你可以做这样的事情,基本上它只是选择id并将它们作为基元发送给SQL来做一个简单的简单的SQL查询

这里的根本问题是尝试将内存中的内容与LinqToSql混合,LinqToSql本质上试图将您的语句转换为查询并在数据库上运行它。数据库不会知道你的List你有内存,所以解决方法是给它理解的东西或在内存中做它。下面的示例提取出ids,并为数据库提供它所知道的内容,一个int

列表
var ids = List2.Select(x => x.Id).ToList();

var IsNameExists= db.List1.Where(a => !ids.Contains(a.Id) && a.Name== InputName)
                         .ToList();