Опитвам се да напиша 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()+","
(конкатенация на низове) вместо конкатенация на char. Няма разлика в нормалния код на C#, но може да е проблематично, когато доставчикът на заявки преведе вашата заявка в SQL. - person MarcinJuraszek   schedule 07.03.2014