使用Linq查询2组复杂对象

本文关键字:复杂 对象 2组 查询 Linq 使用 | 更新日期: 2023-09-27 18:14:47

我有两个由不同的复杂对象组成的列表,每个列表都来自2个独立的数据源。一个列表可能包含记录,也可能不包含记录。当"可选"列表中存在任何记录时,我需要进一步过滤"正常"列表。

不幸的是,我只能找到非常简单的例子在这里和在线,这就是为什么我问这个问题。

伪逻辑是这样的:
当存在QuickFindMaterial记录时,获取query.NameQuickFindMaterial.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();

使用Linq查询2组复杂对象

我想这就是你想要的:

.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();