2

メッセージのリストがあります。各メッセージには、応答タイプのリストがあります。メッセージがIDで並べ替えられ、応答タイプもIDで並べ替えられるように、クエリをプルする必要があります。データベースではID順に並べられていません。

messageResponse.Messages = (from m in db.Messages.Include("ResponseType")
    .SomeMagicSubSortThing("ResponseType.ID")
    select m).OrderBy(m1 => m1.ID).ToList<Message>();

これにより、次の結果が得られます。

Message   ID    Col1    Col2
-- ResponseType  ID    Col1    Col2

...そのようです:

1     MessageA    MessageB
--  1   ResponseTypeC    ResponseTypeD
--  2   ResponseTypeQ    ResponseTypeR
--  3   ResponseTypeX    ResponseTypeZ
--  4   ResponseTypeL    ResponseTypeM

2     MessageE    MessageF
--  1   ResponseTypeG    ResponseTypeH
--  2   ResponseTypeI    ResponseTypeJ
--  3   ResponseTypeB    ResponseTypeS
--  4   ResponseTypeL    ResponseTypeC

現在、メッセージを順番に取得できますが、応答タイプはデータベースにある順序に関係なくあります。応答タイプをサブソートするにはどうすればよいですか?

4

2 に答える 2

1

あなたが探しているのは ThenBy() だと思います:

messageResponse.Messages = (from m in db.Messages.Include("ResponseType")
.SomeMagicSubSortThing("ResponseType.ID")
select m).OrderBy(m1 => m1.ID).ThenBy(n=>n.ResponseType.ID).ToList<Message>()

アップデート

エンティティで、次のような計算プロパティを定義するだけです。

class Message {
   public ICollection<Response> Responses {get; set;}
   public ICollection<Response> SoretedResponses {
       get { return this.Responses.OrderBy(n=>n.Response); }
   }
}

それとも、まだ問題を見逃していますか?

于 2013-01-18T17:32:34.987 に答える
0

EF はこれをうまく行いませんが、次の 2 つのオプションがあります。


1) SelectLinq to Entities クエリで句を使用します。

var messages = db.Messages
  .OrderBy( o => o.ID )
  .Select( o => new
    {
      Message = o,
      ResponseTypes = o.ResponseTypes.OrderBy( x => x.ID ),
    }
  )
  .ToList()
;

これは、EF を取得してデータベース サーバー上の子プロパティを並べ替える唯一の方法です。
出力Listには、匿名型の要素が含まれますSelect


2) 出力で Linq to Objects を使用して、次List<Message>のコレクションを並べ替えますResponseType

List<Message> messages = db.Messages
  .Include( o => o.ResponseTypes )
  .OrderBy( o => o.ID )
  .ToList()
;

foreach( var message in messages )
{
  message.ResponseTypes = message.ResponseTypes.OrderBy( x => x.ID ).ToList();
}

これにより、データベースからすべてのレコードが取得され、メモリ内で並べ替えられます。 出力リストには、ナビゲーション プロパティが入力された
型の要素が含まれます。Message

于 2013-01-18T17:43:01.870 に答える