好吧,我有一個巨大的表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