gpt4 book ai didi

c# - LINQ 查询将列表中的几个项目变为选中状态

转载 作者:行者123 更新时间:2023-11-30 13:40:49 25 4
gpt4 key购买 nike

这是程序和评论。我有一个 ListA 和 ListB。如果 ListA 存在于 ListB 中,我想将其设为 IsChecked = true。这是程序:

public class SomeClass
{
public bool IsChecked { get; set; }
public string Title { get; set; }
}

List<SomeClass> ListA = new List<SomeClass>
{
new SomeClass { IsChecked = false, Title = "A" },
new SomeClass { IsChecked = false, Title = "B" },
new SomeClass { IsChecked = false, Title = "C" },
new SomeClass { IsChecked = false, Title = "D" },
new SomeClass { IsChecked = false, Title = "E" },
new SomeClass { IsChecked = false, Title = "F" },
};

List<SomeClass> ListB = new List<SomeClass>
{
new SomeClass { Title = "A" },
new SomeClass { Title = "D" },
new SomeClass { Title = "F" },
};

// some linq query at the end of which listA's Item containing Title = "A","D","F" will become true

foreach (var item in ListA)
{
Console.WriteLine(item.Title + " " + item.IsChecked);
}
Console.ReadKey();

这是我想出的:

foreach (var item in ListB)
{
var listAItem = (from itemA in ListA
where itemA.Title == item.Title
select itemA).First(); //no need for FirstOrDefault() because it is always going to be present

listAItem.IsChecked = true;
}

但这看起来效率很低。使用 Linq 有更好的方法吗?我只想要 LINQ 中的解决方案。

最佳答案

你可以使用 Join像这样:

var itemAsToBeChecked = from itemA in ListA 
join itemB in ListB on itemA.Title equals itemB.Title
select itemA;

foreach (var itemA in itemAsToBeChecked)
itemA.IsChecked = true;

相信微软对 Join 的实现将首先从 Lookup<,> 创建一个查找 ( Title )至 SomeClassListB在枚举之前 ListA , 匹配每个 itemA随着查找的进行。这应该比您目前拥有的解决方案更有效。

您也可以考虑使用 HashSet<T> 如果您愿意:

var titlesToBeChecked = new HashSet<string>(ListB.Select(itemB => itemB.Title));
var itemAsToBeChecked = ListA.Where(itemA => titlesToBeChecked.Contains(itemA.Title));

foreach (var itemA in itemAsToBeChecked)
itemA.IsChecked = true;

当然,在这里实现 IEqualityComparer<T> 可能是有意义的正如其他人提到的那样,在你的类型上,特别是如果 Title -based 相等性定义在您的程序中很常用。

关于c# - LINQ 查询将列表中的几个项目变为选中状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6883876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com