繁体   English   中英

无法使用LINQ比较两个列表

[英]Not able to compare two Lists using LINQ

我需要根据其列值IdName比较两个List类型。 List1具有namesidsList2还包含IdName和其他列。 现在,我想检查一个输入名称在方法中收到的条件。 这个名字是不是在存在List2 ,但它可能存在List1 .The条件应该验证List1 Id不存在在List2 Id和外部名称可能List1中存在。 我已经使用下面的查询来实现这一点。

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

当我使用此查询时,出现异常

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

我不确定我在查询中做错了什么。 请指导我如何实现此目的以检查List1上的Name是否存在。

更正的查询和答案是:

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

我猜你可以做这样的事情,基本上它只是选择id并将它们作为原语发送到SQL,以进行简单的sql查询

这里的根本问题是试图将内存中的内容与LinqToSql混合在一起,LinqToSql本质上是试图将您的语句转换为查询并在数据库上运行它。 数据库不会知道您的列表中是否有内存,因此解决方案是给它它可以理解的内容或在内存中执行。 下面的示例提取id,并为数据库提供它确实知道的内容,即int列表

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM