我有一个模型列表,我填充了项目。以下列表中填充了项目:-
List<Entry> list = new List<Entry>
{
new Entry { EmployeeId = 1, EntryDate = '2016-11-01', InDate = '2016-11-01' },
new Entry { EmployeeId = 1, EntryDate = '2016-11-05', InDate = '2016-11-05' },
new Entry { EmployeeId = 2, EntryDate = '2016-11-01', InDate = '2016-11-01' }
};现在,我想从数据库中查询一个表Entry,这样的话,记录应该与上面的列表匹配,并以EmployeeId & EntryDate作为参数。
Entry表的列与上面的代码相同。
如果是一个字段,我可以使用contains,但是对于多个字段,我应该做什么呢?
我从数据库表中得到的结果应该与上面的列表匹配,其中2列与EmployeeId和EntryDate匹配。
发布于 2016-12-06 09:32:21
从逻辑上讲,你想要的是:
var query = db.Table.Where(e => list.Any(le => e.EmployeeId == le.EmployeeId &&
e.EntryDate == le.EntryDate));我不知道这是否适用于实体框架,但值得一试。(例如,在LINQ对象中是可以的。)
发布于 2016-12-06 09:49:37
您可以通过.Contains操作符和匿名类型,以一种与EF兼容的方式来实现这一点。
您需要首先将列表投影为包含要比较的属性的匿名类型。
var projection = from e in list
select new { e.EmployeeId, e.EntryDate };然后,您可以将其与查询中的相同投影进行比较。
var query = db.Table.Where(e => projection.Contains(new { e.EmployeeId, e.EntryDate }));但是,这会生成list中每个项都有两个参数的SQL。这对于500张唱片来说有多大的表现力,你必须进行测试。如果这不起作用,您可以用表值参数编写存储过程。
https://stackoverflow.com/questions/40991723
复制相似问题