我需要根据列值List
和Id
比较两种Name
类型。 List1
有names
,ids
和List2
也包含Id
,Name
和其他列。现在我想检查一个输入名称在方法中接收的条件。该名称在List2
中不存在,但它可能存在于List1
中。条件应验证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上的名称是否存在。
更正的查询和答案是:
var IsNameExists= db.List1.ToList().Where(a => !(List2.Select(x => x.Id).Contains(a.Id) && a.Name== InputName).ToList();
答案 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();