gpt4 book ai didi

c# - LINQ 选择包含字符串的所有子集合的所有项目

转载 作者:行者123 更新时间:2023-12-02 09:00:06 25 4
gpt4 key购买 nike

我正在使用 jqueryui 自动完成来帮助用户选择项目。我无法从对象的子集合中选择正确的项目。
对象结构(简化)是

public class TargetType
{
public int Id { get; set; }
public string Name { get; set; }

public virtual ICollection<SubCategory> SubCategories { get; set; }

public TargetType()
{
SubCategories = new HashSet<SubCategory>();
}
}

public class SubCategory
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<SubTargetType> SubTargetTypes { get; set; }

public SubCategory()
{
SubTargetTypes = new HashSet<SubTargetType>();
}
}

目前我正在使用嵌套的 foreach 循环来执行此操作,但是有更好的方法吗?
当前代码:

List<SubTargetResponse> result = new List<SubTargetResponse>();
foreach (SubCategory sc in myTargetType.SubCategories)
{
foreach (SubTargetType stt in sc.SubTargetTypes)
{
if (stt.Name.ToLower().Contains(type.ToLower()))
{
result.Add(new SubTargetResponse {
Id = stt.Id,
CategoryId = sc.Id,
Name = stt.Name });
}
}
}

最佳答案

您可以像这样使用Linq

var result = myTargetType.SubCategories
.SelectMany(sc => sc.SubTargetTypes)
.Where(stt => stt.Name.ToLower().Contains(type.ToLower()))
.Select(stt => new SubTargetResponse {
Id = stt.Id,
CategoryId = sc.Id,
Name = stt.Name });

上面的查询不起作用。以下内容应该可行,但我不建议这样做,因为那样不会更快或更具可读性。

var result = myTargetType.SubCategories
.Select(sc => new Tuple<int, IEnumerable<SubTargetType>>
(sc.Id,
sc.SubTargetTypes.Where(stt => stt.Name.ToLower().Contains(type.ToLower()))))
.SelectMany(tpl => tpl.Item2.Select(stt => new SubTargetResponse {
Id = stt.Id,
CategoryId = tpl.Item1,
Name = stt.Name }));

关于c# - LINQ 选择包含字符串的所有子集合的所有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33581914/

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