包含对项的匹配
本文关键字:包含 | 更新日期: 2023-09-27 18:19:05
我有一个以下形式的映射表:
Id ReferenceId ReferenceType LinkId
要检索一组组合,我可以分别运行每个查询:
var pairs = new List<Pair>
{
Pair.Create(1000, "Car"),
Pair.Create(2000, "Truck"),
};
var maps = new List<Mapping>();
foreach (var pair in pairs)
{
maps.AddRange(context.Mappings.Where(x => x.ReferenceId = pair.Id && x.ReferenceType == pair.Type).ToList());
}
但是,我想将这些合并到一个语句中,以减少对数据库的访问。是否有某种形式的包含语句可以与成对的对象一起工作?或者是否有可能将Or子句附加到循环中的IQueryable上?还有其他解决方案吗?
不确定它是否适用于您的LINQ提供商,但您可以尝试与匿名类型连接:
var mapQuery = from p in pairs
join m in context.Mappings
on new { p.Id, p.Type } equals new { m.ReferenceId, m.ReferenceType}
select m;
List<Mapping> maps = mapQuery.ToList();
您可以将您的查询合并在一起。
像这样:
var pairs = new List<Pair>
{
Pair.Create(1000, "Car"),
Pair.Create(2000, "Truck"),
};
List<Mapping> result =
pairs
.Select(pair =>
context.Mappings.Where(
x => x.ReferenceId == pair.Id
&& x.ReferenceType == pair.Type))
.Aggregate(Queryable.Union)
.ToList();