linq嵌套查询条件排序依据

linq nested query conditional order by

我有一个带有子查询 return 子查询的父查询, 我需要根据父项中的一个 属性 对子查询进行排序。 这是 sudo 代码:

from menu in db.Menus
                     orderby menu.Order
                     select new
                     {
                         Title= menu.Title,
                         OrderNumber = menu.Order,
                         data = (from menuItem in menu.Items
                                  let g = Guid.NewGuid()
                                  orderby g
                                 select new 
                                 {
                                     id = worker.ID,
                                     Title = worker.JobTitle
                                  })
                                 .Take(4)

                     };

没问题,但我需要随机对一些菜单进行排序(NewGuid),并根据项目优先级对其他菜单进行排序,类似这样:

  let g = Guid.NewGuid()
orderby menu.ISRandom ? g: menuItem.Order

但是它给出了有关不匹配 guid 和 int.What 解决方案的错误? second:How 我可以替换 take(4) with take(menu.size) 吗? 谢谢

您可以通过添加 ToString():

来解决排序问题
let g = Guid.NewGuid().ToString()
orderbymenu.ISRandom ? g : menuItem.Order.ToString()

在 EF LINQ 查询中不允许使用 Take(someProperty)。这是因为 take 被翻译成 TOP(x) 子句,它不可能引用 SQL 结果中的列。你只能在没有 Take(或采取一些合理的固定最大值)的情况下将结果拉入内存后才可以这样做。

您似乎想从 menu.Items 中随机读取 4 条记录。

我认为你最好只阅读所有项目,然后稍后在内存中的代码中进行随机选择。