动态LINQ查询嵌套对象

时间:2016-12-13 17:48:08

标签: c# sql linq dynamic

我有一个对象列表(比如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查询...

1 个答案:

答案 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将字符串作为查询传递。但我建议不要使用它。