通过使用LINQ过滤复杂类型的集合来查找父集合

时间:2016-11-24 07:18:53

标签: c# linq

我有以下类结构

public class Document
{
    [BsonId]
    public MongoDB.Bson.ObjectId _id { get; set; }

    public MongoDB.Bson.ObjectId Id
    {
        get;
        set;
    }
    private List<KeywordModel> _domain;

    public string DocumentName { get; set; }

    public int FileSize { get; set; }

    public string DocumentType { get; set; }

    public string ContentType { get; set; }

    public string DateTime { get; set; }

    public List<KeywordModel> Domain {
        get { return this._domain; }
        set { this._domain = value;}
    }

    public Document()
    {

        this._domain = new List<KeywordModel>();

    }
}


public class KeywordModel
{
    public string Keyword { get; set; }
    public int Frequency { get; set; }
}

我有一个父文档类的集合,如:List<Document>。我想写一个LINQ查询,它将采用List<string>并与KeywordModel.Keyword的属性匹配。此外,它会从Document返回List<Document>的集合。

2 个答案:

答案 0 :(得分:0)

所有至少包含1个关键字的文档:

List<string> keywords = ...;
IEnumerable<Document> allDocuments = null;
var documents = allDocuments.Where(d => d.Domain.Any(kw => keywords.Contains(kw.Keyword))).ToList();

答案 1 :(得分:0)

非Linq方法:

您可以使用List<T>的FindAll-Methods。例如:

List<string> matches = new List<string> {"test", "test2", "test3"};

documentList.FindAll(d => d.Domain.Exists(keyModel => matches.Contains(keyModel.KeyWord)));