我有两个由不同复杂对象组成的列表,每个列表来自两个独立的数据源。一个列表可能或可能不包含记录。当“可选”列表中存在任何记录时,我需要进一步过滤“正常”列表。
不幸的是,我只能找到非常简单的例子here和在线,这就是我提出这个问题的原因。
伪逻辑就像这样:
如果存在QuickFindMaterial
条记录,请获取DataSource
集合中query.Name
所在的所有QuickFindMaterial.Material
条记录。如果不存在QuickFindMaterial
条记录,则不会影响最终结果。最后,选择所有不同的DataSource
记录。
课程类似:
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();
答案 0 :(得分:0)
我认为这就是你想要的:
.Where(x => !quickFindMaterial.Any() || quickFindMaterial.Any(y => x.Name == y.Material))
答案 1 :(得分:0)
你可以加入名字 - >材料
示例:
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();