2013-11-17 2 views
0

Я работаю над проектом MVC4. У меня очень странная проблема с .contain(). Я использую тот же код в другом проекте и его работоспособность.Проблема с содержит в linq к sql

Вот мой код:

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

Я предлагаю вам изменить название вопроса. Вы используете «Linq to Entities», а не «Linq to SQL». Это не то же самое ... –

ответ

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; 
       } 
+0

Большое спасибо за очень быструю реакцию и решение проблемы – Mahajan344

2

Не каждый «аромат» LINQ поддерживает все доступные выражения. Например, «Linq to Entities» не мог выполнять операции над объектами, не связанными с запросом. Другими словами, ваш запрос Linq to Entities должен содержать только объектов и основных типов (целые числа, строки и т. Д.). Linq to Entities не поддерживает все доступные операции LINQ, и это также может зависеть от вашего драйвера Linq to Entities.

Если вы хотите использовать все операции LINQ, я бы предложил перейти в пространство Linq to Objects. Там у вас есть все доступные функциональные возможности LINQ, но вам необходимо сначала вычислить вычислительную стоимость поиска данных. Поэтому, если ваш запрос имеет значительную стоимость исполнения, возможно, вам придется его реформировать.

Надеюсь, я помог!

Смежные вопросы