c# – 从数据库中检索匹配列表的多个值的记录
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 从数据库中检索匹配列表的多个值的记录,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1306字,纯文字阅读大概需要2分钟。
内容图文
![c# – 从数据库中检索匹配列表的多个值的记录](/upload/InfoBanner/zyjiaocheng/903/711a80610e4b48d884a3cae422fb73ed.jpg)
我在编写C#linq查询时遇到问题,该查询基于过滤器列表的多个列从数据库中检索数据.
项目列表包含多个列(例如A和B)并且是动态的.
我的第一个想法是在where语句中编写任何语句,但在EF中不允许这样做.
var result = _repository.Where(x => items.Any(y => x.A == y.A && x.B == y.B));
我还首先在A上尝试过滤器,检索所有数据并在B上过滤,但是效果不佳.
var ListA = items.Select(x => x.A).ToList();
var result = _repository.Get(x => ListA.Contains(x.A));
另一种方法是创建一些c#代码来生成这样的东西:
SELECT A,B,C,D
FROM Items
WHERE
(A = 1 AND b = 1) OR
(A = 7 AND b = 2) OR
(A = 4 AND b = 3)
但是没有合适的方法可以做到这一点.
有谁知道如何解决这个问题?
解决方法:
所以,不完全在Linq,但一种方法是使用Predicate / PredicateBuilder(有关信息here)
这将允许您设置类似的东西
var predicate = PredicateBuilder.False<YourType>();
foreach (var item in items)
{
var innerpred = PredicateBuilder.True<YourType>();
innerpred = innerpred.And(x=> x.A == item.A);
innerpred = innerpred.And(x=> x.B == item.B);
predicate = predicate.Or(innerpred);
}
然后你的条件是
var result = _repository.Where(predicate);
你可以轻松地将谓词生成移动到静态方法或类似的东西来清理代码,但它会导致where子句生成SQL的SQL
WHERE
(A = 1 AND b = 1) OR
(A = 7 AND b = 2) OR
(A = 4 AND b = 3)
这就是你所追求的,显然初始循环可能会很慢,具体取决于你有多少项,但如果SQL表被正确索引,它应该仍然是一个快速查询
内容总结
以上是互联网集市为您收集整理的c# – 从数据库中检索匹配列表的多个值的记录全部内容,希望文章能够帮你解决c# – 从数据库中检索匹配列表的多个值的记录所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。