我有一个父查询子查询返回子, 我需要根据父级中的一个属性对子查询进行排序。 这是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的错误。什么是解决方案?
第二:我如何取代take(4) with take(menu.size)
?
感谢' S
答案 0 :(得分:1)
您可以通过添加ToString()
:
let g = Guid.NewGuid().ToString()
orderbymenu.ISRandom ? g : menuItem.Order.ToString()
在EF LINQ查询中不允许使用Take(someProperty)
。这是因为take被转换为TOP(x)
子句,它可能不会引用SQL结果中的列。在将结果拉入内存而没有Take
(或采取一些合理的固定最大值)之后,您才能执行此操作。
答案 1 :(得分:0)
似乎你想从menu.Items随机读取四条记录。
我认为你只需阅读所有项目,然后在内存中的代码中进行随机选择就会更好。