问题描述
我试图从RedGate,以便正确地转换呼叫。
I am trying to understand some performance implication of Linq from this free ebook by RedGateftp://support.red-gate.com/ebooks/under-the-hood-of-net-memory-management-part1.pdf
On page 157-158 in this book, they created following example.
Order[] pastDueAccounts = null;
DateTimedueDate = DateTime.Today.AddDays(-7);
using(varcontext = new Context())
{
pastDueAccounts = context.Accounts.Where(account => account.DueDate < dueDate).ToArray();
}
They then re-factored part of lamda expression into following function.
public bool PastDueAccount(Account account)
{
return account.DueDate < DateTime.Today.AddDays(-7);
}
Finally they used this function as follows.
Order[] pastDueAccounts = null;
using(varcontext = new Context())
{
pastDueAccounts = context.Accounts.Where(account => PastDueAccount(account)).ToArray();
}
Based on what I researched so far, its not possible to run this linq query as LINQ will not be able recognize the method and cannot be translate into a store expression. I wonder if this example is wrong and simply not possible to run or if I am just having hard time getting my heard around on how to simulate this problem?
You are correct, this would not be able to be called by LINQ-to-Entities the way it's displayed.
The only way it could be used in LINQ-to-Entities is to:
- Create the equivalent of the function on the server side.
- Map the function in the model appropriately so that it translates the call correctly.
这篇关于可以在调用Where中调用named方法吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!