How can I call local method in Linq to Entities query?

半世苍凉 提交于 2020-01-19 12:47:09

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!