代码之家  ›  专栏  ›  技术社区  ›  ptutt

实体框架Linq-分组依据的子查询

  •  2
  • ptutt  · 技术社区  · 15 年前

    我试图实现一个包含子查询的查询,它本身包含分组。

    我的代码基于对这个的回答 question

    代码的目的是基于电子邮件地址对“person”表执行简单的重复数据消除,并返回最新的person行。

    var innerQuery = (from p in db.Person
                                  join r in db.Registration on p equals r.Person
                                  join e in db.EventDetail on r.EventDetail equals e
                                  where e.Client.ClientID == clientID
                                  group p by p.Email into g
                                  select g.Max(p => p.PersonID));
    
    var query = (from p2 in db.Person where innerQuery.Contains(p2.PersonID) select p2);
    

    尝试执行查询时,我收到以下错误消息:

    Linq to实体无法识别 方法的布尔值 包含[Int32](System.Linq.IQueryable`1[System.Int32], Int32)方法,而此方法不能 转换为存储表达式。

    我已经测试了InnerQuery,它只是按预期返回一个int列表,但是查询失败,上面的消息。

    非常感谢您的帮助。

    1 回复  |  直到 15 年前
        1
  •  2
  •   Rup    15 年前

    不是 query 只是加入?

    var query = from p2 in db.Person
                join iq in innerQuery on p2.PersonID equals iq
                select p2;
    

    我不确定 = iq 部分,但我通常不使用那个语法对不起-在另一种形式中

    .Join(innerQuery, p2 => p2.PersonId, iq => iq, (p2, iq) => p2);
    

    用于联接和选择。