Использование Содержит в Lambda с объектом IQueryable и анонимным полем - PullRequest
0 голосов
/ 23 октября 2019

Так что после прочтения нескольких постов о том, как использовать Contains в Lambda, я не могу заставить это работать. Это должно быть просто, но я борюсь с этим до того момента, когда я собираюсь просто переписать его в Dapper.

Проблема заключается в следующем: У меня есть объект данных(сборка с EntityFramework), которая извлекает некоторые данные из базы данных, эти данные сохраняются в переменной типа IQueryable<a>:

var data = raw.Select(p => new 
    {
        Id = p.Id,
        StatusId = p.StatusId,
        ProjectName = p.Room.Department.Project.Name,
        ProjectId = p.Room.Department.Project.Id,
        DepartmentName = p.Room.Department.Name,
        DateCreated = p.DateCreated,
        RoomName = p.Room.Name,
        UserCreatedName = p.UserCreated.Firstname + (string.IsNullOrEmpty(p.UserCreated.Insertion) ? string.Empty : " ") + p.UserCreated.Insertion + " " + p.UserCreated.Lastname,
        Comment = p.Comment,
    });

В некоторых случаях мне нужно отфильтровать данные, этот фильтрlist определенных идентификаторов проекта:

List<Right> rights = Rights.GetItems(userId).ToList();
var projectIds = rights.Select(x => x.ItemId);

Объект данных должен возвращать только те записи, которые соответствуют идентификаторам projectIds list.

Хотя по какой-то причине я не могу сделать это:

data = data.Where(p => x.ProjectId.Contains(projectIds);

Поле ProjectId не имеет перегрузки Contains, это потому, что оно Anonymous type?

Я работаю в проекте MVC 5 (.NET 4.7).

1 Ответ

2 голосов
/ 23 октября 2019

Я подозреваю, что вы хотите проверить, что ваш список projectsIds содержит идентификатор проекта, вместо того, чтобы пытаться увидеть, содержит ли projectId ваш список идентификаторов проекта?

Так попробуйте это?

data = data.Where(p => projectIds.Contains(p.ProjectId));

ProjectId, скорее всего, int, string или guid? метод Contains - это метод расширения для универсального типа IEnumerable. ProjectId, скорее всего, не является IEnumerable и, следовательно, он не имеет перегрузки. Содержит

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...