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 条记录。
我认为你最好只阅读所有项目,然后稍后在内存中的代码中进行随机选择。
我有一个带有子查询 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 条记录。
我认为你最好只阅读所有项目,然后稍后在内存中的代码中进行随机选择。