使用Linq查询2组复杂对象
本文关键字:复杂 对象 2组 查询 Linq 使用 | 更新日期: 2023-09-27 18:14:47
我有两个由不同的复杂对象组成的列表,每个列表都来自2个独立的数据源。一个列表可能包含记录,也可能不包含记录。当"可选"列表中存在任何记录时,我需要进一步过滤"正常"列表。
不幸的是,我只能找到非常简单的例子在这里和在线,这就是为什么我问这个问题。
伪逻辑是这样的:
当存在QuickFindMaterial
记录时,获取query.Name
在QuickFindMaterial.Material
集合中的所有DataSource
记录。如果没有QuickFindMaterial
记录,不影响最终结果。最后,选择所有不同的DataSource
记录。
Classes Looks Like:
public class QuickFindMaterial
{
public string SiteId { get; set; }
public string Material { get; set; }
}
代码看起来像:
我已经在
WHERE
逻辑 var dataSource = DocumentCollectionService.ListQuickFind();
var quickFindMaterial = ListMaterialBySiteID(customerSiteId);
var distinct = (from query in dataSource
select new
{
ID = query.DocumentID,
Library = query.DocumentLibrary,
ModifiedDate = query.DocumentModifiedDate,
Name = query.DocumentName,
Title = query.DocumentTitle,
Type = query.DocumentType,
Url = query.DocumentUrl,
})
//.Where(x => x.Name.Contains(quickFindMaterial.SelectMany(q => q.Material)))
//.Where(x => quickFindMaterial.Contains(x.Name))
.Distinct();
我想这就是你想要的:
.Where(x => !quickFindMaterial.Any() || quickFindMaterial.Any(y => x.Name == y.Material))
你可以加入Name -> Material
的例子:
var distinct = (from query in dataSource
join foo in quickFindMaterial on query.Name equals foo.Material
select new
{
ID = query.DocumentID,
Library = query.DocumentLibrary,
ModifiedDate = query.DocumentModifiedDate,
Name = query.DocumentName,
Title = query.DocumentTitle,
Type = query.DocumentType,
Url = query.DocumentUrl,
}).Distinct();