首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匹配多个参数的Linq查询

匹配多个参数的Linq查询
EN

Stack Overflow用户
提问于 2016-12-06 09:18:32
回答 2查看 2.4K关注 0票数 1

我有一个模型列表,我填充了项目。以下列表中填充了项目:-

代码语言:javascript
复制
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列与EmployeeIdEntryDate匹配。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-06 09:32:21

从逻辑上讲,你想要的是:

代码语言:javascript
复制
var query = db.Table.Where(e => list.Any(le => e.EmployeeId == le.EmployeeId &&
                                               e.EntryDate == le.EntryDate));

我不知道这是否适用于实体框架,但值得一试。(例如,在LINQ对象中是可以的。)

票数 2
EN

Stack Overflow用户

发布于 2016-12-06 09:49:37

您可以通过.Contains操作符和匿名类型,以一种与EF兼容的方式来实现这一点。

您需要首先将列表投影为包含要比较的属性的匿名类型。

代码语言:javascript
复制
var projection = from e in list 
                 select new { e.EmployeeId, e.EntryDate };

然后,您可以将其与查询中的相同投影进行比较。

代码语言:javascript
复制
var query = db.Table.Where(e => projection.Contains(new { e.EmployeeId, e.EntryDate }));

但是,这会生成list中每个项都有两个参数的SQL。这对于500张唱片来说有多大的表现力,你必须进行测试。如果这不起作用,您可以用表值参数编写存储过程。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40991723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档