2016-06-15 2 views
0

У меня есть функция, которая принимает 3 string[], а затем с помощью EF6 запрашивает мою базу данных, чтобы попытаться найти совпадение. В списках не может быть ничего, одного или многих переменных.Выполнение запроса с помощью EF6 с использованием потенциально пустых списков

using (var db= new Db(ConnectionString)) 
{ 
    var results = 
       await 
        db.dbases.Where(
           w => 
            portfolioSelected.Any(a => a == w.portfolio) && 
            statusSelected.Any(a => a == w.statusname) && 
            deskSelected.Any(a => a == w.assignedto) 
           ).ToListAsync(); 
} 

При попытке запроса я получаю нулевые результаты.

Как я могу написать это, чтобы 3 списка могли иметь любую композицию, в том числе пустую, и я получаю результаты, которые я желаю?

+0

Вы пробовали использовать == DBNull.Value || a == w.portfolio? – easymoney202

+0

см. Http://stackoverflow.com/a/34986244, если это связано – Drew

+0

@ easymoney202 Я использую функцию .Any() для строки [], которая не будет работать, к сожалению, это не одно значение. –

ответ

0

Per Jeroen Heiers comment, я смог разбить запрос, проверив, был ли string[] пустым и создал мой запрос по частям.

 using (var db = new Db(ConnectionString)) 
     { 
      IQueryable<dbase> query = cmax.dbases.Where(w => w != null); 
      var results = new List<dbase>(); 

        if (portfolioSelected != null) 
         query = query.Where(w => portfolioSelected.Any(a => a == w.portfolio)); 
        if (statusSelected != null) 
         query = query.Where(w => statusSelected.Any(a => a == w.statusname)); 
        if (deskSelected != null) 
         query = query.Where(w => deskSelected.Any(a => a == w.assignedto)); break; 


      results = await query.ToListAsync(); 
     }