的LINQ到SQL凡擴展方法同樣採用一個參數,一些看起來是這樣的:的LINQ to SQL凡擴展方法問題
Expression<Func<Table,bool>> predicate
可能有人形容,簡單地說,正是這種說法的手段?我想創建一個方法來接受其中的一個方法,我可以將它傳遞給L2S查詢,並且我想明確地知道它是什麼,以及它應該如何調用。
謝謝。
的LINQ到SQL凡擴展方法同樣採用一個參數,一些看起來是這樣的:的LINQ to SQL凡擴展方法問題
Expression<Func<Table,bool>> predicate
可能有人形容,簡單地說,正是這種說法的手段?我想創建一個方法來接受其中的一個方法,我可以將它傳遞給L2S查詢,並且我想明確地知道它是什麼,以及它應該如何調用。
謝謝。
變量類型Expression<Func<Table, bool>>
意味着需要表示方法/委託/λ表達,需要一個Table
參數並返回一個bool
一個代碼表達。採用Expression<>
參數的方法旨在解析代碼以生成其他代碼,而不是評估Expression
本身。 LINQ to SQL可以使用它們來生成SQL代碼來執行代碼所代表的內容。
關於Expression<>
參數的奇怪之處在於,您將值傳遞給它們的方式與傳遞lambda表達式的方式相同,但是您的值是否被解釋爲Expression
或lambda取決於您的方法的簽名,重新傳遞給它。
下面是傳遞一個Expression<Func<Table, bool>>
到一個方法(這看起來與傳遞Func<Table, bool>
參數的例子:
theMethod(table => table.NumLegs > 3);
// or to be more explicit:
theMethod((Table table) => table.NumLegs > 3);
// or...
theMethod(delegate(Table table) { return table.NumLegs > 3; });
這裏是你會怎麼寫你自己的方法,它有一個作爲參數,並將其應用於到L2S查詢:
IQueryable<Table> addWhereClause(
IQueryable<Table> tables, Expression<Func<Table, bool>> whereClause)
{
return tables.Where(whereClause);
}
我只是提供表達式如何work.From給出here示例中的示例代碼簡單的解釋就是一個例子 -
System.Linq.Expressions.Expression<Func<int, bool>> expr = i => i < 5;
// Compile the expression tree into executable code.
Func<int, bool> deleg2 = expr.Compile();
// Invoke the method and print the output.
Console.WriteLine("deleg2(4) = {0}", deleg2(4));
//OUTPUT : deleg2(4) = True
那麼簡單的話,你說如果有返回true沒有的功能< 5樣 -
Func<int, bool> deleg = i => i < 5;
所以,你可以建立一個表達式中使用上述語法做同樣的事情,然後把它傳遞給說 一個Where
或一些東西simliar.Simple例子 -
int[] i={1,2,3,4,5}
System.Linq.Expressions.Expression<Func<int, bool>> expr = i => i < 5;
var result=i.Where(expr);//equivalent to i.Where(c=>c<5)
在你的情況你有一個表作爲參數,所以它會採取一個表對象和返回布爾。
List<Employee> e= new List<Employee>();
e.Add(new Employee(1,"ABC",5000));
e.Add(new Employee(2,"ACC",5000));
e.Add(new Employee(3,"ADC",50009));
System.Linq.Expressions.Expression<Func<Employee, bool>> expr =e => e.Salary < 50000;
var result=e.Where(expr);//give all employee with salary<50000
+ 1..for'addWhereClause'方法 – Vishal
出色的工作。如果我能不止一次投你了,我會這麼做。 –