gpt4 book ai didi

c# - 动态 LINQ 查询嵌套对象

转载 作者:太空宇宙 更新时间:2023-11-03 15:11:00 25 4
gpt4 key购买 nike

我有一个对象列表(比如家庭),每个对象都包含一个其他非值类型对象(比如 child )的列表。我想查询此列表并动态指定 where 子句(在运行时)。

var fselected = from f in families 
from c in f.Children
where (f.FamilyAge > 15 && c.Age > 13)
select f;

我发现最接近的是 NuGet 上的 Dynamic LINQ,但除了顶级对象上的简单 where 子句之外,我找不到任何关于如何执行上述语句的示例。

我能想到的唯一解决方案是将 C 和 F 分成单独的 where 子句,先运行 c 查询,然后在结果数据集上运行 F 查询...

最佳答案

不要使用字符串让您的用户在您的数据库上创建动态查询,这会使您容易受到 sql 注入(inject)攻击。相反,向您的用户公开可为空的参数

public Family GetFamily(int? familyAge, int? age)
{
var families = GetAllFamilies();

if(familyAge.HasValue)
families = families.Where(x => x.familyAge = familyAge.value);

if(age.HasValue)
families = families.Where(x => x.age = age.value);

return familes.ToList();
}

更新

尽管使用字符串让用户查询数据库时存在注入(inject)问题,但您可以使用 Dynamic Linq Library将字符串作为查询传递。但我确实建议不要使用它。

关于c# - 动态 LINQ 查询嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41127475/

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