where中使用导航字段查询出错 返回

SqlSugar 沟通中
17 566
ISugarQueryable<AiAgrZbzDevInfEntity> entities = Db.Queryable<AiAgrZbzDevInfEntity>().OrderByDescending(it => it.dtinsertdate);
entities = entities.Where(lambda)
    .WhereIF(stateList?.Length > 0, x => stateList.Any(y => x.Review.OrderByDescending(z => z.dtinsertdate).ToList().First().state == y));

需求是根据stateList中的值和审核状态(x.Review)对比后返回列表,因为审核数据会有多条,所以需要返回最新一条审核数据然后再进行对比,语句如上,现在报错“当前表达式x.Review.OrderByDescending(z => z.dtinsertdate).ToList().First().state 不支持,查看导航是否配置正确等或者缺少Includes()”,实体类配置是对的

热忱回答17

  • fate sta fate sta VIP0
    2025/8/21

    x.Review.OrderByDescending(z => z.dtinsertdate).ToList().First().state

    这个语法不支持。

    0 回复
  • @fate sta:那语句应该怎么写?

    0 回复
  • fate sta fate sta VIP0
    2025/8/22

    var list=stateList.Select(y =>x.Review).ToList()

    变成一维变量

    0 回复
  • @fate sta:看不懂这个逻辑...大佬能再详细说说吗?需求是where完还需要分页,然后ToList()

    0 回复
  • fate sta fate sta VIP0
    2025/8/22

    var list=stateList.Orderbyxxxxx.Take(1).Select(y =>x.Review)ToList()

     .WhereIF(stateList?.Length > 0, x => list.Any(s=>s.state==y)))

    0 回复
  • fate sta fate sta VIP0
    2025/8/22

    把逻辑扔到外面

    0 回复
  • @fate sta:我没说清楚,stateList是个字符串数组,就是["0","2"]这样子的数,不是ISugarQueryable。Review是ISugarQueryable<AiAgrZbzDevInfEntity>的子实体,关系是一对多。现在我只需要最新的review实体,而非数组,然后让这个实体的state与stateList进行对比

    0 回复
  • fate sta fate sta VIP0
    2025/8/22

     SqlFunc.Subquery<类>().Where(关联).Where(s=>stateList.Contains(s.state)).OrderBy(XXX).Select(s=>s.state )

    0 回复
  • fate sta fate sta VIP0
    2025/8/22

    Where("sql")

    如果比较复杂可以直接where sql实现

    0 回复
  • @fate staSubqueryable不能使用PartitionBy吗?

    0 回复
  • fate sta fate sta VIP0
    2025/8/22

    @娇娇欲静:不支持。 你可以用嵌套查询实现 ,不用子查询。

    0 回复
  • dynamic obj = new ExpandoObject();
    ISugarQueryable<AiAgrZbzDevInfEntity> entities = Db.Queryable<AiAgrZbzDevInfEntity>();
    var list = entities.Where(lambda).Select(x => new AiAgrZbzDevInfEntity
    {
        strno = x.strno.SelectAll(),
        Review = SqlFunc.Subqueryable<AiAgrReviewEntity>().Where(y => y.reviewno == x.strno).OrderByDesc(y => y.dtinsertdate).First()
    })
    .OrderByDescending(x => x.dtinsertdate)
    .Includes(x => x.ZbzDevice, y => y.AreasDef)
    .ToList()
    .WhereIF(stateList?.Length > 0, x => x.Review != null && stateList.Any(y => x.Review.state == y));
    if (pageIndex != 0 && pageSize != 0)
    {
        //获取满足条件的数据总条数
        long count = list.Count();
        obj.totalNumber = count;
        //使用count * 1.0 / pageSize 可以计算出数据总页数,考虑到有可能最后一页不满,使用Ceiling()取整
        long pageCount = (long)Math.Ceiling(count * 1.0 / pageSize);
        obj.pageCount = pageCount;
        list = list.Skip((pageIndex - 1) * pageSize).Take(pageSize);
    }
    obj.list = list;

    @fate sta:返回数据中Review全部为空,但正常是有数据的,我反复确认过数据。另外,先ToList再分页的话,等以后数据多了,查询速度就受影响了,但是如果先分页再查询(即.Includes(x => x.ZbzDevice, y => y.AreasDef).ToList()的.ToList()去掉,移动变成obj.list = list.ToList()),会报错“当前表达式x.Review.state 不支持,查看导航是否配置正确等或者缺少Includes() 

    0 回复
  • 先分页再查询、不传stateList,生成的sql语句为

    SELECT *,[x].[strno] as app_ext_col_0 FROM [AiAgrZbzDevInf] [x]  WHERE ( 1 = 1 ) ORDER BY [dtinsertdate] DESC
    
    SELECT *,[x].[strno] FROM [AiAgrZbzDevice]  WHERE   [strno] = '59c7d1e670dd80aa'
    
    SELECT *,[x].[strno] FROM [AiAgrAreasDef]  WHERE   [strareaid] = 'id_1753239786450_39lgblr'
    
    SELECT * FROM ((SELECT TOP 1 *,0 as sugarIndex FROM [AiAgrReview] [y]  WHERE ( [reviewno] = N'516643b13d17d7a3' ) ORDER BY [dtinsertdate] DESC)) TEMP
     UNION ALL  SELECT * FROM ((SELECT TOP 1 *,1 as sugarIndex FROM [AiAgrReview] [y]  WHERE ( [reviewno] = N'e0c7a633088ef4cc' ) ORDER BY [dtinsertdate] DESC)) TEMP

    运行

    SELECT * FROM ((SELECT TOP 1 *,0 as sugarIndex FROM [AiAgrReview] [y]  WHERE ( [reviewno] = N'516643b13d17d7a3' ) ORDER BY [dtinsertdate] DESC)) TEMP
     UNION ALL  SELECT * FROM ((SELECT TOP 1 *,1 as sugarIndex FROM [AiAgrReview] [y]  WHERE ( [reviewno] = N'e0c7a633088ef4cc' ) ORDER BY [dtinsertdate] DESC)) TEMP

    确认是有相关Review数据的

    0 回复
  • @fate sta:大佬,你看看Review为啥会丢失

    0 回复
  • fate sta fate sta VIP0
    2025/8/25

    select要扔tolist前面。还有疑问提供完的DEMO

    0 回复
  • fate sta fate sta VIP0
    2025/8/25

    https://www.donet5.com/Home/Doc?typeId=2366

    提问模版。有DEMO我这边才能更快帮你定位问题。

    0 回复
  • 我升级到最新版就好了

    0 回复