使用Linq查询2组复杂对象

时间:2011-11-16 22:44:53

标签: c# linq linq-to-objects

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

不幸的是,我只能找到非常简单的例子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();

2 个答案:

答案 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();