Я новичок в C#, ASP.NET, MVC, LINQ и почти все, что я делаю. Мы разработали рабочий прототип системы планирования событий, в которой перечислены все события для всех сайтов, независимо от того, какой сайт планирует какое событие. Мы адаптируем прототип к полной версии и теперь хотим, чтобы планировщики видели события только для сайтов, которые они планируют.Возвращение списка целых чисел и использование .contains()
Моя первоначальная попытка состоит в том, чтобы заполнить список целых чисел, содержащих идентификатор сайтов, которые планировщик может планировать. Затем я буду использовать .contains, чтобы определить, находятся ли события в списке зарегистрированных пользователей. Таким образом, у меня есть следующий запрос, который работает (обратите внимание, что пользователь еще не может выбрать несколько сайтов, поэтому я использую .FirstOrDefault(), потому что у нас есть некоторые проблемы с данными, которые мы работаем с клиентом для адресации. Также обратите внимание, что я включал в себя полный способ дополнительно ниже):
int site = (from u in context.Employees
join hf in context.SiteHomeFacs on u.Default_Location_Code equals hf.HomeFac
where u.User_ID == usr
select hf.siteID).FirstOrDefault();
var sites = new List<int> {site};
return sites;
Теперь я хочу по умолчанию некоторых ролей, чтобы быть в состоянии планировать все сайты и это, когда я начинаю иметь проблемы (полный метод здесь):
public List<int> GetUserSites(string usr)
{
try
{
using (var context = new DBcontext())
{
if (HttpContext.Current.User.IsInRole("Owner") || HttpContext.Current.User.IsInRole("Controller"))
{
var everySite = (from s in context.Sites
select new List<int> { s.ID });
return everySite;
}
var site = (from u in context.Employees
join hf in context.SiteHomeFacs on u.Default_Location_Code equals hf.HomeFac
where u.User_ID == usr
select new List<int> { hf.siteID }).FirstOrDefault();
return sites;
}
}
catch (Exception)
{
throw;
}
}
Ошибка в 'return everySite' равна:
Невозможно неявно преобразовать тип 'System.Linq.IQueryable>' в 'System.Collections.Generic.List'. Явное преобразование существует (вы пропали без вести броска?)
Мне кажется нелогичным, что запрос был бы приемлем с .FirstOrDefault()
, но не без этого. Может ли кто-нибудь помочь мне вернуть список целых значений, чтобы я мог использовать .contains? Или предложить лучший путь для всех?
Если ваш список долго, и вам нужно сделать много проверок, я бы использовал HashSet вместо List - производительность намного лучше для поиска. вернуть новый HashSet (everySite); –
@ShannonHolsinger Да, вы правы, добавили! – Sajeetharan
Стоит отметить, что 'select new List {s.ID}' должен быть 'select s.ID'. –