我正在研究MVC4项目。我正面临着非常奇怪的问题.contain()。 我在其他项目中使用相同的代码,并且工作正常。
这是我的代码:
string[] split = new string[] { };
if (Helper.DepartmentFilter != null)
{
split = Helper.DepartmentFilter.Split(',');
}
using (dbEntities Context = new dbEntities())
{
var result = (from me in Context.master_employee
join ud in Context.user_detail on me.employeeid equals ud.employeeid
where me.status.Equals("A")
&& (split.Length == 0 || split.Contains(me.department))
select new
{
ud.email,
me.employeeid,
me.name
}).ToList();
return result;
}
我收到错误
The LINQ expression node type 'ArrayLength' is not supported in LINQ to Entities.
有人可以帮我吗?
答案 0 :(得分:2)
并非LINQ的每个“风格”都支持其每个可用表达式。例如,“Linq to Entities”无法对与查询无关的对象执行操作。换句话说,您的Linq to Entities查询应仅包含实体和基本类型(整数,字符串等)。 Linq to Entities不支持所有可用的LINQ操作,这也可能取决于您的Linq to Entities驱动程序。
如果你想使用所有的LINQ操作,我建议你进入“Linq to Objects”空间。在那里,您拥有所有可用的LINQ功能,但您必须首先支付数据检索计算成本功能。因此,如果您的查询具有显着的性能成本,那么您可能需要对其进行改革。
希望我帮忙!
答案 1 :(得分:1)
移出“split.Length”。
string[] split = new string[] { };
if (Helper.DepartmentFilter != null)
{
split = Helper.DepartmentFilter.Split(',');
}
var splitLength = split.Length;
using (dbEntities Context = new dbEntities())
{
var result = (from me in Context.master_employee
join ud in Context.user_detail on me.employeeid equals ud.employeeid
where me.status.Equals("A")
&& (splitLength == 0 || split.Contains(me.department))
select new
{
ud.email,
me.employeeid,
me.name
}).ToList();
return result;
}