问题
I have the following code:
public void SalesCount(string customerId)
{
..
..
return ...;
}
var resultQuery = dataContext.Customers
.Where (c => c.Name == "Alugili")
.Where (c => SalesCount(c.CustomerId) < 100);
When I execute resultQuery I get a translation to SQL exception.
I need to call SalesCount in the Where can I do that is there any workaround for this problem!
回答1:
Simply you can't. You can't execute C# code on the SQL server directly, you can use only Expressions and some special recognized functions...
Unless you transform your query (at least partially) in a LINQ-to-Objects...
var resultQuery = dataContext.Customers
.Where (c => c.Name == "Alugili")
.AsEnumerable()
.Where (c => SalesCount(c.CustomerId) < 100);
Be aware that the last Where will be executed on the client side, so many useless rows will be fetched from the DB.
回答2:
Try
var resultQuery = dataContext.Customers
.Where (c => c.Name == "Alugili")
.ToArray()
.Where (c => SalesCount(c.CustomerId) < 100);
But then the second Where is not run as SQL but locally - all customers with the name "Alugili" are pulled from the DB...
Otherwise you have to write out your method directly in the where method as lambda expression.
回答3:
Add && between two where condition..It will work
回答4:
yes, you can.
but you should change return type for your function:
public **int** SalesCount(string customerId)
{
..
..
return 500;
}
var resultQuery = dataContext.Customers.AsEnumerable()
.Where (c => c.Name == "Alugili" && SalesCount(c.CustomerId) < 100);
来源:https://stackoverflow.com/questions/18714821/how-can-i-call-local-method-in-linq-to-entities-query