使用 linq c 根据条件从另一个列表值更新 List 属性#

Update List property from another list value based on the condition using linq c#

提问人:Kshitij Gupta 提问时间:10/20/2023 最后编辑:Kshitij Gupta 更新时间:10/20/2023 访问量:46

问:

我有两个清单:

public static class CsvList
{
    private static readonly List<CsvLogData> csvList= new List<CsvLogData>();

    public static List<CsvLogData> csvData { get => csvList; }
}

public class CsvLogData
{
    public string SiteUrl { get; set; }
    public string SiteTitle { get; set; }
    public string KeywordMatched { get; set; }
}

public static void FilterList()
{
    List<string> Keyword = new List<string>() { "test1", "test2", "test3", "test4" };
    
    var filtered = CsvList.csvData.Where(x => Keyword.Any(y =>(x.SiteTitle.ToLower().Contains(y)) || 
    (x.SiteUrl.ToLower().Contains(y))));
}

我能够根据条件逐个过滤一个列表,但我想要的是,一旦满足“where”条件,我想将关键字列表中的关键字存储在csvData列表中。所以我尝试编写一个 Linq 查询,但我不明白如何在 csvData.KeywordMatched 属性中存储该关键字

我尝试写的内容:

foreach (var item in filtered.Where(x => Keyword.Any(y => (x.SiteTitle.ToLower().Contains(y)) || (x.SiteUrl.ToLower().Contains(y)))))
{
   item.KeywordMatched = ?
}

如何在属性中存储匹配的关键字?

C# 列表 LINQ

评论


答:

0赞 Svyatoslav Danyliv 10/20/2023 #1

您可以通过操作员执行此操作。由于 LINQ 是关于查询而不是修改的,因此我建议创建新实例:SelectMany

var query = 
    from csv in CsvList.csvData
    from k in Keyword
        .Where(k => (csv.SiteTitle.ToLower().Contains(k)) || 
            (csv.SiteUrl.ToLower().Contains(k)))
    select new CsvLogData 
    { 
        SiteUrl = csv.SiteUrl,
        SiteTitle = csv.SiteTitle,
        KeywordMatched = k 
    };

var result = query.ToList();