Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ OrderBy/ThenBy ChildrenCollection.SortOrder_C#_Linq_Entity Framework_Linq To Entities - Fatal编程技术网

C# LINQ OrderBy/ThenBy ChildrenCollection.SortOrder

C# LINQ OrderBy/ThenBy ChildrenCollection.SortOrder,c#,linq,entity-framework,linq-to-entities,C#,Linq,Entity Framework,Linq To Entities,编辑: 本例中的两个查询都不是按位置排序顺序排序的。有人对此有什么建议吗 我需要一些关于按子实体列对组的实体集合进行排序的帮助。我有一个从组到位置的一对多关系 我需要按照组名和位置排序顺序对组进行排序 因为子实体是一个集合,所以我遇到了麻烦 下面是我正在使用的代码,它可以正常工作,但会返回重复的代码: var groups = db.GetNavigationGroups() .Where(g => selectedLocation > 0 ? g.NavigationGr

编辑:

本例中的两个查询都不是按位置排序顺序排序的。有人对此有什么建议吗

我需要一些关于按子实体列对组的实体集合进行排序的帮助。我有一个从组到位置的一对多关系

我需要按照组名和位置排序顺序对组进行排序

因为子实体是一个集合,所以我遇到了麻烦

下面是我正在使用的代码,它可以正常工作,但会返回重复的代码:

 var groups = db.GetNavigationGroups()
    .Where(g => selectedLocation > 0 ? g.NavigationGroupLocations.Any(l => l.Location == selectedLocation) : true)
    .SelectMany(g => g.NavigationGroupLocations, (g, l) => new { g, l })
    .OrderBy(x => x.g.Name)
    .ThenBy(x => x.l.SortOrder)
    .Select(x => x.g);
然后我使用FirstOrDefault()尝试了这种方法:

List groups=db.DataModel.NavigationGroups
.Where(g=>selectedLocation>0?g.NavigationGroupLocations.Any(l=>l.Location==selectedLocation):true)
.OrderBy(g=>g.Name)
.ThenBy(g=>g.NavigationGroupLocations.Where(l=>l.Location==selectedLocation&&l.GroupID==g.ID)。OrderBy(l=>l.SortOrder)。FirstOrDefault()
.ToList();

问题是,我似乎无法根据locations SortOrder列按所需的顺序获取组。

您的第二个查询看起来像是尝试按NavigationGroupLocations对象排序,而不是按其字段排序。您是否尝试过:

List<NavigationGroup> groups = db.DataModel.NavigationGroups
.Where(g => selectedLocation > 0 ? g.NavigationGroupLocations.Any(l => l.Location == selectedLocation) : true)
.OrderBy(g => g.Name)
.ThenBy(g => g.NavigationGroupLocations.Where(l => l.Location == selectedLocation && l.GroupID == g.ID).OrderBy(l => l.SortOrder).FirstOrDefault().SortOrder)
.ToList();
List groups=db.DataModel.NavigationGroups
.Where(g=>selectedLocation>0?g.NavigationGroupLocations.Any(l=>l.Location==selectedLocation):true)
.OrderBy(g=>g.Name)
.ThenBy(g=>g.NavigationGroupLocations.Where(l=>l.Location==selectedLocation&&l.GroupID==g.ID).OrderBy(l=>l.SortOrder.FirstOrDefault().SortOrder)
.ToList();
您可能还希望将selectedLocation条件添加到order子句中

List<NavigationGroup> groups = db.DataModel.NavigationGroups
.Where(g => selectedLocation > 0 ? g.NavigationGroupLocations.Any(l => l.Location == selectedLocation) : true)
.OrderBy(g => g.Name)
.ThenBy(g => g.NavigationGroupLocations.Where(l => selectedLocation > 0 ? l.Location == selectedLocation : true && l.GroupID == g.ID).OrderBy(l => l.SortOrder).FirstOrDefault().SortOrder)
.ToList();
List groups=db.DataModel.NavigationGroups
.Where(g=>selectedLocation>0?g.NavigationGroupLocations.Any(l=>l.Location==selectedLocation):true)
.OrderBy(g=>g.Name)
.ThenBy(g=>g.NavigationGroupLocations.Where(l=>selectedLocation>0?l.Location==selectedLocation:true&&l.GroupID==g.ID).OrderBy(l=>l.SortOrder.FirstOrDefault().SortOrder)
.ToList();

您的第二个查询看起来像是在尝试按NavigationGroupLocations对象排序,而不是按其字段排序。您是否尝试过:

List<NavigationGroup> groups = db.DataModel.NavigationGroups
.Where(g => selectedLocation > 0 ? g.NavigationGroupLocations.Any(l => l.Location == selectedLocation) : true)
.OrderBy(g => g.Name)
.ThenBy(g => g.NavigationGroupLocations.Where(l => l.Location == selectedLocation && l.GroupID == g.ID).OrderBy(l => l.SortOrder).FirstOrDefault().SortOrder)
.ToList();
List groups=db.DataModel.NavigationGroups
.Where(g=>selectedLocation>0?g.NavigationGroupLocations.Any(l=>l.Location==selectedLocation):true)
.OrderBy(g=>g.Name)
.ThenBy(g=>g.NavigationGroupLocations.Where(l=>l.Location==selectedLocation&&l.GroupID==g.ID).OrderBy(l=>l.SortOrder.FirstOrDefault().SortOrder)
.ToList();
您可能还希望将selectedLocation条件添加到order子句中

List<NavigationGroup> groups = db.DataModel.NavigationGroups
.Where(g => selectedLocation > 0 ? g.NavigationGroupLocations.Any(l => l.Location == selectedLocation) : true)
.OrderBy(g => g.Name)
.ThenBy(g => g.NavigationGroupLocations.Where(l => selectedLocation > 0 ? l.Location == selectedLocation : true && l.GroupID == g.ID).OrderBy(l => l.SortOrder).FirstOrDefault().SortOrder)
.ToList();
List groups=db.DataModel.NavigationGroups
.Where(g=>selectedLocation>0?g.NavigationGroupLocations.Any(l=>l.Location==selectedLocation):true)
.OrderBy(g=>g.Name)
.ThenBy(g=>g.NavigationGroupLocations.Where(l=>selectedLocation>0?l.Location==selectedLocation:true&&l.GroupID==g.ID).OrderBy(l=>l.SortOrder.FirstOrDefault().SortOrder)
.ToList();