gpt4 book ai didi

c# - C# 中的 LINQ 查询?

转载 作者:行者123 更新时间:2023-11-30 12:19:30 24 4
gpt4 key购买 nike

我是 C# 和 Linq 编程世界的新手。我想做类似的事情,但是 SubType 是表类型的 FK,我不能做我在这个例子中所做的事情:

public static List<DropdownModel> GetSubTypes(List<string> ListTypes)
{
List<DropdownModel> SubTypes = new List<DropdownModel>();
using (DocumentXtractorEntities DataBase = new DocumentXtractorEntities())
{
foreach (string TypeID in ListTypes)
{
int TypeIDINT = Int32.Parse(TypeID);
SubTypes.AddRange((from C in DataBase.SubType.Where(s => s.Active && s.TypeID == TypeIDINT)
select new DropdownModel()
{
ID = C.SubTypeID,
Description = C.Name,
Selected = false
}).ToList());
}
}
return SubTypes;
}

因此,当我选择一种或多种类型时,上面的代码有点过滤子类型文本框。现在,我需要做相反的事情,在选择子类型时填充类型列表。

我已经尝试过一些东西,但我知道我这样做是不可能的。我现在的代码是这样的:

    public static List<DropdownModel> GetTypesBySubTypes(List<string> ListSubTypes)
{
List<DropdownModel> Types = new List<DropdownModel>();
using (DocumentXtractorEntities DataBase = new DocumentXtractorEntities())
{
foreach (string SubTypeID in ListSubTypes)
{
int SubTypeIDINT = Int32.Parse(SubTypeID);
Types.AddRange((from C in DataBase.Type.Where(s => s.Active && s.SubType.Contains(SubTypeIDINT))
select new DropdownModel()
{
ID = C.TypeID,
Description = C.Name,
}).ToList());
}
}
return Types;
}

[编辑]

我已经设法做一个 sql 查询来完成这项工作:

select T.TypeID from Type T join SubType ST on St.TypeID=T.TypeID
where ST.SubTypeID=3

但我不知道如何将其转换为 linq 查询并执行 Type.AddRange()。

有人可以帮我吗?

最佳答案

您可以使用 Intersect 方法从提供的子类型列表中查找包含任何子类型的类型。这也消除了使用 foreach 进行迭代并将其留给 Linq 处理的需要。

List<int> subTypes = ListSubTypes.Select(s => int.Parse(s)).ToList();
DataBase.Type.Where(s => s.SubType.Select(st => st.SubTypesID).Intersect(subTypes).Any())

这是一个基于您的代码的示例。

public static List<DropdownModel> GetTypesBySubTypes(List<string> ListSubTypes)
{
List<DropdownModel> Types = new List<DropdownModel>();
List<int> subTypes = ListSubTypes.Select(s => int.Parse(s)).ToList();

using (DocumentXtractorEntities DataBase = new DocumentXtractorEntities())
{
Types.AddRange((from C in DataBase.Type
.Where(s => s.Active
&& subTypes.Intersect(s.SubType.Select(st => st.SubTypesID)).Any())
select new DropdownModel()
{
ID = C.TypeID,
Description = C.Name,
}).ToList());

}
return Types;
}

HTH

关于c# - C# 中的 LINQ 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57677154/

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