Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 LINQ: WHERE IN (INTEGER)  [new]
potkin
Member

Откуда: Ungvar
Сообщений: 1072
Есть таблицы:
    [Table("Projects")]
    public class Project
    {
        [Key]
        public int? ProjectID { get; set; }
        [Required]
        public string ProjectName { get; set; }
    }

    [Table("ProjectEmployees")]
    public class ProjectEmployee
    {
        [Key]
        public int? ProjectEmployeeID { get; set; }

        [Display(Name = "Проект")]
        [Required]
        public int ProjectID { get; set; }
        [ForeignKey("ProjectID")]
        public virtual Models.Sklad.Proj.Project project { get; set; }

        [Display(Name = "Сотрудники")]
        [Required]
        public int DirEmployeeID { get; set; }
        [ForeignKey("DirEmployeeID")]
        public virtual Models.Sklad.Dir.DirEmployee dirEmployee { get; set; }
    }

Проект и связанные с ним сотрудники.


Нужно такой запрос перевести в LINQ
SELECT * FROM Projects AS p
WHERE p.ProjectID IN 
(
 SELECT ProjectID FROM ProjectsDirEmployees pe 
 WHERE pe.DirEmployeeID=5
)



То есть сделать что-то на подобие такого:
var queryProjectID =
    (
        from x in db.ProjectEmployees
        where x.DirEmployeeID == field.DirEmployeeID
        select new
        {
            ProjectID = x.ProjectID.ToString()
        }
    ).ToList();

query = query.Where(x => queryProjectID.Contains(x.ProjectID.ToString()));

(этот код не работает)
21 май 17, 10:41    [20499182]     Ответить | Цитировать Сообщить модератору
 Re: LINQ: WHERE IN (INTEGER)  [new]
potkin
Member

Откуда: Ungvar
Сообщений: 1072
Надо было так:
var queryProjectID =
    (
        from x in db.ProjectEmployees
        where x.DirEmployeeID == field.DirEmployeeID
        select x.ProjectID
    ).ToList();

query = query.Where(m => queryProjectID.Contains(m.ProjectID.Value));
21 май 17, 11:02    [20499203]     Ответить | Цитировать Сообщить модератору
 Re: LINQ: WHERE IN (INTEGER)  [new]
potkin
Member

Откуда: Ungvar
Сообщений: 1072
select x.ProjectID
и
m.ProjectID.Value
21 май 17, 11:03    [20499205]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить