好吧,我有一个巨大的表db。超过100万条记录和超过50列。 (我知道它不是最优的,但它的工作原理)所以我需要运行限制返回数据量的查询。现在我的问题是这样的。我有一些自定义查询运行并返回数据。用户可以通过选择将生成Predicate模板的过滤器和选项并将其应用于列表来更多地过滤该数据。我现在需要获取谓词列表并合并它们并重新查询数据库来搜索(更改或其他条目匹配)。问题是这样的Linq自定义sql
private Func<table,bool> filterAll()
{
Func<table, bool> temp = null;
var list = mylist.filterList; //filterlist is a list<Predicate<table>>
var list2 = list.Select(val => val.Value).ToArray();
foreach(var a in list2)
{
temp += t => a(t);
}
return temp;
}
private void loadWithFiltersButton_Click(object sender, EventArgs e)
{
var temp = db.table.Where(filterAll());
}
我不能把谓词变成一个可用的sql查询。我收到一个异常,说它无法为Predicates列表生成sql。我也试过这种
Func<table, bool> query1 = temp2 => temp2.Name.Contains("test string");
Func<table, bool> query2 = temp2 => temp2.ignore == false;
var temp = db.table.Where(query1);
var myval = temp.Where(temp2 => temp2.Name.Contains("test string")).Select(val => val).ToList();
尽管这确实执行问题生成的SQL拉下整个表格的犯规生成where子句的。
我一直在搜索,发现这个https://stackoverflow.com/questions/974719/how-to-use-linq-to-compile-a-lambda-expression-to-custom-sql-or-otherwise但人们在答案中发布的所有链接对我而言已经死亡。
那么基本上,我怎样才能将多个谓词组合成一个可用的查询,这将使db返回尽可能少的数据呢?
编辑:尝试这也是Concatenating Lambda Functions in C#但它也引发了无法生成SQL查询的异常。
使用'表达式>'。 –
这在我做第二部分时很有用。事情是我的主要问题是我有一个Predicates列表,我需要组合和执行。我怎样才能做到这一点? – lesyriad