Linq 链接到另一个表的复杂orderby

Linq 链接到另一个表的复杂orderby,linq,linq-to-sql,linq-to-entities,linq-to-objects,Linq,Linq To Sql,Linq To Entities,Linq To Objects,首先,我有以下查询: var query = from p in db.Products from pc in p.NpProductCategories where pc.CategoryId == categoryId select p; 我正在对其应用更多过滤,最后我想对结果进行排序: if (orderBy == ProductSorting

首先,我有以下查询:

var query = from p in db.Products
                        from pc in p.NpProductCategories
                        where pc.CategoryId == categoryId 
                        select p;
我正在对其应用更多过滤,最后我想对结果进行排序:

if (orderBy == ProductSortingEnum.Name)
                    query = query.OrderBy(x => x.Name);
                else
                    query = query.OrderBy(............);
我最大的问题(来自不太了解linq)是这里的其他问题。如何按不在当前结果集中的列对结果进行排序?我想以某种方式链接到orderby中的另一个linq查询我试图实现的排序是使用ProductId链接到NpProductVariants查询,以匹配NpProductVariant和产品
并按NpProductVariant的价格进行排序,我认为您可以将您的
连接到查询,只要它返回相同的内容。所以可能是这样的(我不是100%确定,因为我没有试过):


但是我认为最好检查生成的sql,这样它仍然有效。

假设您在dbml中设置了关系

对于一对一(和多对一):

对于一对多:

query = query.OrderBy(p => p.NpProductVariants.Select(v => v.Price).Max());

此外:


问题是,在代码的稍后部分,我会进行分页:query.Skip(index*pageSize).Take(pageSize).ToList(),这需要排序枚举。如果我在查询中这样做,我会得到一个例外:方法“Skip”仅支持LINQ to实体中的排序输入。方法“OrderBy”必须在方法“Skip”之前调用。为什么会出现问题?让我们回顾一下,如果您只有第一个订购人,它是否有效?如果是这样的话,只要结果查询的返回类型相同,第二个就可以了。你真是个天才!!!这是你给我的第二个变种,我正在寻找。谢谢!超过几个单词时,请使用草书而不是粗体:)
query = query.OrderBy(p => p.NpProductVariant.Price);
query = query.OrderBy(p => p.NpProductVariants.Select(v => v.Price).Max());
var query =
  from p in db.Products 
  where p.NpProductCategories.Any(pc => pc.CategoryId == categoryId)
  select p;