我有一个对象列表(比如family),每个对象都包含一个其他非值类型对象(比如child)的列表。我想查询此列表并动态指定where子句(在运行时)。
var fselected = from f in families
from c in f.Children
where (f.FamilyAge > 15 && c.Age > 13)
select f;
我发现最接近的就是NuGet上的动态LINQ,但除了顶层对象的简单where子句之外,我找不到任何关于如何做上述语句的例子。
我能想到的唯一解决方案是拆分为C和F的单独where子句,首先运行c查询,然后对结果数据集运行F查询...
答案 0 :(得分:0)
不要使用字符串让您的用户在您的数据库上创建动态查询,这将使您容易受到SQL注入攻击。相反,向用户公开可以为空的参数
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();
}
<强>更新强>
尽管使用字符串让用户查询数据库时出现了注入问题,但您可以使用Dynamic Linq Library将字符串作为查询传递。但我建议不要使用它。