Я пытаюсь написать запрос Linq для поиска одного соответствующего значения в столбце базы данных, который представляет собой строку значений с разделителями-запятыми. Чтобы убедиться, что я не совпадаю с частью одного из этих значений или пропущу первое или последнее значение, я обычно добавляю запятую в начало и конец как цели, так и источника. К сожалению, это не работает с Linq, и я не понял, как использовать SqlMethods.Like в этом контексте. Мой код:
int totalItems = 0;
var userList = from r in db.User
select r;
if (!string.IsNullOrEmpty(filter.department))
{
userList = userList.Where(s => s.department.Contains(filter.department));
}
if (!string.IsNullOrEmpty(filter.role))
{
// The following code that includes commas in the strings
// causes a runtime error regarding simple or enumerated objects:
userList = userList.Where(
r => (','+r.roles.Trim()+',').Contains(','+filter.role.Trim()+',')
);
// The following code works, but is not what I need to do the search properly:
//userList = userList.Where(s => s.roles.Contains(filter.role));
}
totalItems = userList.Count(); // here is where the error actually occurs
Я бы не возражал против использования SqlMethods.Like, но не знаю, как его использовать при изменении такого запроса.
r.roles
иfilter.roles
? - person Selman Genç   schedule 07.03.2014","+r.roles.Trim()+","
(конкатенацию строк) вместо конкатенации символов. Это не имеет значения в обычном коде C#, но может быть проблематичным, когда поставщик запросов переводит ваш запрос в SQL. - person MarcinJuraszek   schedule 07.03.2014