У меня есть 2 модели: ApplicationUser и TaskModelфильтр запроса, который содержит ICollection свойства с помощью LINQ
public class ApplicationUser : IdentityUser
{
public virtual ICollection<TaskModel> Tasks { get; set; }
...
}
и
public class TaskModel
{
public virtual ICollection<ApplicationUser> Managers { get; set; }
...
}
Я хочу, чтобы выбрать из базы данных только та запись, который содержит некоторую AplicationUser объект менеджеров. Чем я попытался с помощью LINQ
ApplicationUser currentUser = "SomeObject";
var taskModels = db.Tasks.Where(t => t.Managers.Contains(currentUser)).Include(t => t.Autor);
Но что генерируется ошибка в ИНЕКЕ. В сообщении об ошибке говорится: «Невозможно создать константу типа TaskToDo.Models.ApplicationUser». В этом контексте он поддерживает только примитивные типы и типы перечислений ». я получаю то, что мне нужно с помощью следующего кода
var allTasks = db.Tasks.Include(t => t.Autor).ToList();
List<TaskModel> filterTasks = new List<TaskModel>();
foreach (var task in allTasks)
{
if (task.Managers.Contains(currentUser))
filterTasks.Add(task);
}
return View(filterTasks);
Но я хотел бы знать, как это решить с помощью синтаксиса LINQ
Добавить '.ToList();' конец вашего linq как 'db.Tasks.Where (t => t.Managers.Contains (currentUser)). Включить (t => t.Autor) .ToList(); ' – SilentCoder
Проблема в том, что вы не можете использовать' contains' в LINQ –