Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态LINQ-动态,服务器端Where子句_Linq_Dynamic_Where Clause - Fatal编程技术网

动态LINQ-动态,服务器端Where子句

动态LINQ-动态,服务器端Where子句,linq,dynamic,where-clause,Linq,Dynamic,Where Clause,我一直在阅读动态LINQ和谓词生成器。我对一些后端物流有点不清楚,也有点困惑。我试图为我的一个应用程序提供一个reports/advanced search选项,其中涉及一个讨厌的groupwise max查询 我可以轻松地将其组合在一起以编程方式过滤结果,但是,出于性能原因,我当然更希望在SQL server上执行where子句,而不是在.net代码中执行。我不确定哪些解决方案实际上在SQL中执行谓词,而不是在client/.NET端执行谓词。下面是我想用LINQ做的一个例子: from fb

我一直在阅读动态LINQ和谓词生成器。我对一些后端物流有点不清楚,也有点困惑。我试图为我的一个应用程序提供一个reports/advanced search选项,其中涉及一个讨厌的groupwise max查询

我可以轻松地将其组合在一起以编程方式过滤结果,但是,出于性能原因,我当然更希望在SQL server上执行where子句,而不是在.net代码中执行。我不确定哪些解决方案实际上在SQL中执行谓词,而不是在client/.NET端执行谓词。下面是我想用LINQ做的一个例子:

from fbd in db.FooBarDatas
join max_fbd in
    (from fbd in db.FooBarDatas
     group fbd by new { fbd.FooID, fbd.BarID } into grp
     select new { MaxFooBarDataID = grp.Max(fbd => fbd.FooBarDataID }
    )
on fbd.FooBarDataID equals max_fbd.MaxFooBarDataID
select new
{
    FooBarDataID = fbd.FooBarDataID,
    NormalizedPropertyName1 = fbd.Column1,
    NormalizedPropertyName2 = fbd.Column2,
    NormalizedPropertyName3 = fbd.Column3,
    etc...
}
这是我的基本问题。最后,我将它们全部放入一个通用链接数据对象中,因为我希望从查询中动态提取的大量数据来自外部表,并且我希望它们都作为直接属性引用

现在我想要一种方法,可以向这个查询添加一大堆“where”子句条件,以便生成一个有意义的报告。根据用户给定的参数,“where”子句将有所不同。记录集相当大,所以我再次寻找一种在SQL端进行过滤的方法


有谁能提供一个简单的例子来说明如何做到这一点?提前感谢您的帮助。

我相信我在看到一篇相当奇怪的文章标题后找到了答案

在请求迭代器之前,IQueryable似乎不会实际执行任何类型的TSQL编译。下面是一个非常简单的例子:

// this does not actually call a TSQL query
IQueryable<FooBar> q = (from fb in db.FooBars select fb);
// this line still does not call a TSQL query
q = q.Where(fb => fb.FooID == 3);
// this line still does not call a TSQL query
q = q.Where(fb => fb.BarID == 74)
// this line finally compiles a TSQL statement, calls the query, and
// gathers the results:
List<FooBar> results = q.ToList();
//这实际上并不调用TSQL查询
IQueryable q=(从db.FooBars中的fb选择fb);
//此行仍然不调用TSQL查询
q=q.Where(fb=>fb.FooID==3);
//此行仍然不调用TSQL查询
q=q.Where(fb=>fb.BarID==74)
//这一行最后编译一个TSQL语句,调用查询,然后
//收集结果:
列表结果=q.ToList();
IQueryable对象是按需评估对象。在尝试之后,我发现一些充斥着UDF的非常复杂的语句仍然在几乎瞬间返回。另一篇解释此筛选与服务器端筛选之间区别的文章可以在这里找到:


我希望这能帮助其他想做我正在做的事情的人。

我相信我在遇到一篇相当奇怪的文章标题后找到了答案

在请求迭代器之前,IQueryable似乎不会实际执行任何类型的TSQL编译。下面是一个非常简单的例子:

// this does not actually call a TSQL query
IQueryable<FooBar> q = (from fb in db.FooBars select fb);
// this line still does not call a TSQL query
q = q.Where(fb => fb.FooID == 3);
// this line still does not call a TSQL query
q = q.Where(fb => fb.BarID == 74)
// this line finally compiles a TSQL statement, calls the query, and
// gathers the results:
List<FooBar> results = q.ToList();
//这实际上并不调用TSQL查询
IQueryable q=(从db.FooBars中的fb选择fb);
//此行仍然不调用TSQL查询
q=q.Where(fb=>fb.FooID==3);
//此行仍然不调用TSQL查询
q=q.Where(fb=>fb.BarID==74)
//这一行最后编译一个TSQL语句,调用查询,然后
//收集结果:
列表结果=q.ToList();
IQueryable对象是按需评估对象。在尝试之后,我发现一些充斥着UDF的非常复杂的语句仍然在几乎瞬间返回。另一篇解释此筛选与服务器端筛选之间区别的文章可以在这里找到:

我希望这能帮助其他想做我正在做的事情的人