【发布时间】:2011-12-22 19:50:24
【问题描述】:
我有两组数据(复杂对象列表或 SQL 数据 - LINQ to Entities),我试图在其中找到两组数据的交集。特别是 Complex 属性的交集,“HashData”,如下所示:
左边的集合可能是大约 10000 行,而右边的集合总是大约 100 行的子集。我意识到,如果我在存储它时按“Hashdata”对左侧的集合进行排序,使用某种二进制搜索算法进行搜索会快得多,但是由于与问题无关的原因,我不能这样做。
较小的数据子集从不存储在 SQL 中(仅为说明目的而显示在下面的 SQL 表中)。它在运行时以List<ShowData> 的形式呈现。
目前我正在对数据进行一个可怜的循环并像这样进行匹配(其中recording 是 100 行列表,ShowData 是 10000 行列表):
List<ShowData> ShowData = (from showData in context.ShowDatas
where (showData.Show.Id == advert.Id)
orderby showData.HashData ascending
select showData).ToList();
foreach (ShowData recording in recordingPoints) {
foreach (ShowData actual in ShowData) {
if (recording.HashData == actual.HashData) {
}
}
}
所以基本上我想做的是:
返回一个 ShowData 对象列表(大集合),其中任何 HashData(来自小集合)在 ShowData 但在 LINQ to Entity 初始查询中找到 DB。
我接近了:
private IEnumerable<ShowData> xyz(List<ShowData> aObj, List<ShowData> bObj)
{
IEnumerable<string> bStrs = bObj.Select(b => b.HashData).Distinct();
return aObj.Join(bStrs, a => a.HashData, b => b, (a, b) => a);
}
【问题讨论】:
标签: c# linq entity-framework entity intersection