Рассмотрите следующий фрагмент кода.Сравнение строки не работает должным образом
var query = (from a in db.MyEntity
where a.MyEntityId == id
select a.Team).FirstOrDefault();
string userName = userDto.UserName.Replace('.', ' ');
string[] teamArray = query.Split(new char[] { ',' });
for (int i = 0; i < teamArray.Count(); i++)
{
if (!teamArray[i].Contains(userName, StringComparison.OrdinalIgnoreCase))
{
return View("Unauthorized");
}
}
У меня есть столбец в базе данных, которая имеет ,
отделенные значения внутри него, т.е.
User 1, User 2, User 3 ...
У меня нет контроля над сколько пользователей, которые идут в этой колонке. То, что я пытаюсь достичь, - показать страницу Unauthorized
любому пользователю, которого нет в этом столбце. Я получаю имя пользователя для входа в систему, используя HttpContext.Current.User.Identity.Name.Split('\\')[1];
. Для целей тестирования я поместил свое имя пользователя в столбец вместе с другим, но, похоже, проверяет каждое имя пользователя, а затем возвращает мне Unauthorized
, который он не должен делать, потому что мой имя пользователя находится в столбце. Может кто-то сказать мне, где я ошибся, пожалуйста.
Ниже метод расширения я использую
public static bool Contains(this string source, string toCheck, StringComparison comp)
{
return source.IndexOf(toCheck, comp) >= 0;
}
Должен ли я создать 'IEnumerable'? Можете ли вы привести пример, если вы не возражаете –
Code
@Code your'teamArray'_is_ a 'IEnumerable'. просто замените цикл 'for' моим последним фрагментом кода. –
Я сделал то, что вы предложили, и я получаю следующее сообщение об ошибке: '' string [] 'не содержит определения для' Contains 'и лучший метод перегрузки' Queryable.Contains (IQueryable , строка, IEqualityComparer ) 'требует приемник типа «IQueryable )' –
Code