更新时间:2023-02-13 13:32:14
查看此示例,将其粘贴在dotnetfiddle中(当我尝试上传它时它没有工作)
或者放入你自己的控制台应用程序。
简短回答是数据不会是奥德在查询中如此生成,因此得到的结果将按查询层次结构排序默认排序。
修复:
1.查询数据你想通过它自己的变量来订购。
2.使用该集合作为主要列表来获取其他数据,例如俱乐部名称。你有时不得不翻转你对对象查询linq的想法。
还要看你如何做Include语句,因为你应该首先包括父表数据。
Check out this sample, stick it in dotnetfiddle (it wasn't working when I tried to upload it)
or put into your own console app.
The short answer is data will not be ordered within query like that so resulting will be sorted by top of query hierarchy sort default.
to fix:
1. query the data you want to order by into its own variable.
2. use that collection as the main list to get other data from e.g. club names. you just sometimes have to flip your thinking about object queries linq.
Also watch how you do Include statement as you should include parent table data first.
using System.Collections.Generic;
using System.Linq;
using System;
namespace ConsoleApplication1
{
public class Program
{
private static IEnumerable<Club> _Clubs = new Club[]
{
new Club { Id = 1, Name = "Club1" },
new Club { Id = 2, Name = "Club2" }
};
private static IEnumerable<Member> _Members = new Member[]
{
new Member { Id = 1, Name = "Joey" },
new Member { Id = 2, Name = "Chandler" },
new Member { Id = 3, Name = "Ross" },
new Member { Id = 4, Name = "Phoebe" },
new Member { Id = 5, Name = "Veronica" },
new Member { Id = 6, Name = "Rachel" }
};
private static IEnumerable<ClubMember> _ClubMembers =
Associate(_Clubs.Single(x => x.Id == 1), _Members.Where(x => new int[] { 1, 3, 5 }.Contains(x.Id)))
.Concat(
Associate(_Clubs.Single(x => x.Id == 2), _Members.Where(x => new int[] { 2, 4, 6 }.Contains(x.Id)))
);
public static void Main()
{
var clubsAsc = _Clubs.OrderBy(x => x.Name).Select(x => x.Name);
var clubsDesc = _Clubs.OrderByDescending(x => x.Name).Select(x => x.Name);
var club1membersAsc = _ClubMembers.Where(x=>x.ClubId==1).OrderBy(x => x.Member.Name);
var club1membersDesc = _ClubMembers.Where(x=>x.ClubId==1).OrderByDescending(x => x.Member.Name);
var club2MembersAsc = _ClubMembers.Where(x=>x.ClubId==2).OrderBy(x => x.Member.Name);
var club2MembersDesc = _ClubMembers.Where(x=>x.ClubId==2).OrderByDescending(x => x.Member.Name);
Console.WriteLine("Clubs ASC: " + Environment.NewLine + FormatText(clubsAsc));
Console.WriteLine();
Console.WriteLine("Clubs DESC: " + Environment.NewLine + FormatText(clubsDesc));
Console.WriteLine();
Console.WriteLine("Club1Members DESC:" + Environment.NewLine + FormatClubMembers(club1membersDesc));
Console.WriteLine();
Console.WriteLine("Club1Members ASC:" + Environment.NewLine + FormatClubMembers(club1membersAsc));
Console.WriteLine();
Console.WriteLine("Club2Members ASC:" + Environment.NewLine + FormatClubMembers(club2MembersAsc));
Console.WriteLine();
Console.WriteLine("Club2Members DESC:" + Environment.NewLine + FormatClubMembers(club2MembersDesc));
Console.ReadKey();
}
public static string FormatText(IEnumerable<string> array)
{
return array.Aggregate((current, next) => current + Environment.NewLine + next);
}
public static string FormatClubMembers(IEnumerable<ClubMember> array)
{
return array.Select(x => FormatClubMember(x))
.Aggregate((current, next) => current + Environment.NewLine + next);
}
public static string FormatClubMember(ClubMember cm)
{
return "Club: " + cm.Club.Name + " - " + "Member: " + cm.Member.Name;
}
private static IEnumerable<ClubMember> Associate(Club club, IEnumerable<Member> members)
{
foreach (var mem in members)
{
yield return new ClubMember
{
Club = club,
ClubId = club.Id,
Member = mem,
MemberId = mem.Id
};
};
}
}
public class Club
{
public int Id { get; set; }
public string Name { get; set; }
}
public class ClubMember
{
public int ClubId { get; set; }
public int MemberId { get; set; }
public virtual Club Club { get; set; }
public virtual Member Member { get; set; }
}
public class Member
{
public int Id { get; set; }
public string Name { get; set; }
}
}
输出:
俱乐部ASC:
俱乐部1
俱乐部2
俱乐部DESC:
俱乐部2
俱乐部1
Club1会员DESC:
俱乐部:Club1 - 会员:Veronica
俱乐部:Club1 - 会员:Ross
俱乐部:Club1 - 会员:Joey
Club1会员ASC :
俱乐部:Club1 - 会员:Joey
俱乐部:Club1 - 会员:Ross
俱乐部:Club1 - 会员:Veronica
Club2会员ASC:
俱乐部:Club2 - 会员:Chandler
俱乐部:Club2 - 会员:Phoebe
俱乐部:Club2 - 会员:Rachel
Club2会员DESC:
俱乐部:Club2 - 会员:Rachel
俱乐部:Club2 - 会员:Phoebe
俱乐部:Club2 - 会员:Chandler
Output:
Clubs ASC:
Club1
Club2
Clubs DESC:
Club2
Club1
Club1Members DESC:
Club: Club1 - Member: Veronica
Club: Club1 - Member: Ross
Club: Club1 - Member: Joey
Club1Members ASC:
Club: Club1 - Member: Joey
Club: Club1 - Member: Ross
Club: Club1 - Member: Veronica
Club2Members ASC:
Club: Club2 - Member: Chandler
Club: Club2 - Member: Phoebe
Club: Club2 - Member: Rachel
Club2Members DESC:
Club: Club2 - Member: Rachel
Club: Club2 - Member: Phoebe
Club: Club2 - Member: Chandler