EF4 を使用すると、プロパティのプロパティごとに並べ替えることができます。つまり、
Name プロパティを持つ EntityA。エンティティ B には、いくつかの他のプロパティとエンティティ A があります。EntityA.Nameで並べたEntityBの一覧を取得したい
entityBList = _repo.Find<EntityB>() .OrderBy(x => x.EntityA.Name);
EF4 を使用すると、プロパティのプロパティごとに並べ替えることができます。つまり、
Name プロパティを持つ EntityA。エンティティ B には、いくつかの他のプロパティとエンティティ A があります。EntityA.Nameで並べたEntityBの一覧を取得したい
entityBList = _repo.Find<EntityB>() .OrderBy(x => x.EntityA.Name);
なぜこれが機能しないのですか?EF4 を使用していないことはわかっていますが、コンセプトは同じです。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LinqOrderByReference
{
class Program
{
static void Main(string[] args)
{
EntityA[] entitiesA = { new EntityA { Ordinal = 3, SecretCode = "xxx"},
new EntityA { Ordinal = 2 ,SecretCode = "x"},
new EntityA { Ordinal = 1 ,SecretCode = "x"} };
EntityB[] entitiesB = { new EntityB { Name = "C", EntityA = entitiesA[2] },
new EntityB {Name = "B", EntityA = entitiesA[1] },
new EntityB {Name = "A", EntityA = entitiesA[0] } };
IEnumerable<EntityB> entitiesBList = entitiesB.OrderBy(x => x.EntityA.Ordinal);
foreach (EntityB b in entitiesBList)
{
Console.WriteLine("EntityB.Name: {0}, Ordinal {1}.", b.Name, b.EntityA.Ordinal);
}
Console.Read();
}
}
public class EntityA
{
public int Ordinal { get; set; }
public string SecretCode { get; set; }
}
public class EntityB
{
public string Name { get; set; }
public EntityA EntityA { get; set; }
}
}
出力:
EntityB.Name: C、序数 1.
EntityB.Name: B、序数 2.
EntityB.Name: A、序数 3.
name プロパティは単純な文字列ですか、それとも First name と Last Name を組み込んでいますか? その場合、GetHashCode メソッドをオーバーライドしますか? その場合は、この投稿を参照してください。オーバーライドされた System.Object.GetHashCode に最適なアルゴリズムは何ですか?