在linq to sql中包含问题

时间:2013-11-17 07:14:01

标签: c# linq linq-to-sql

我正在研究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.

有人可以帮我吗?

2 个答案:

答案 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;
                }