linq嵌套查询条件顺序

时间:2017-06-08 11:16:02

标签: entity-framework linq ef-code-first sql-order-by

我有一个父查询子查询返回子, 我需要根据父级中的一个属性对子查询进行排序。 这是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

2 个答案:

答案 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随机读取四条记录。

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