提问人:Kshitij Gupta 提问时间:10/20/2023 最后编辑:Kshitij Gupta 更新时间:10/20/2023 访问量:46
使用 linq c 根据条件从另一个列表值更新 List 属性#
Update List property from another list value based on the condition using linq c#
问:
我有两个清单:
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 = ?
}
如何在属性中存储匹配的关键字?
答:
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();
下一个:动态转置列表对象
评论