2017-08-23 9 views
2

私は(例えば、2)、会話GROUPBY内部テイク(制限)リスト

から2つのメッセージが、私は私のリストがどのように見えるかについて気にしないが、私はからわずか2メッセージを欲しい取る必要がありますID 1、2つのID2からのメッセージ、および

例に行く:

ID = idConversation

Id | MessageId | Message 
---|-----------|-------- 
1 | 1   | "asd" 
1 | 2   | "asd2" 
1 | 3   | "asd3" 
1 | 4   | "asd4" 
2 | 5   | "asd5" 
3 | 6   | "asd6" 
3 | 7   | "asd7" 
3 | 8   | "asd8" 
3 | 9   | "asd9" 
3 | 10  | "asd10" 
4 | 11  | "asd11" 
4 | 12  | "asd12" 
4 | 13  | "asd13" 

と私はしたいこと

Id MessageId Message 
---|-----------|-------- 
1 | 1   | "asd" 
1 | 2   | "asd2" 
2 | 5   | "asd5" 
3 | 6   | "asd6" 
3 | 7   | "asd7" 
4 | 11  | "asd11" 
4 | 12  | "asd12" 

私はidConversationを気にすることができますが、私は会話でgroubyを使用して数量を制限できません。

var test = unitOfWork.ChatMensagemRepository.GetAll() 
       .Where(x => x.PessoaCodigoPessoa == codigoRemetente) 
       .GroupBy(x => x.ChatConversaCodigoChatConversa) 
       .Select(group => new 
       { 
        codigoChat = group.Key, 
        list = group.Select(mensagem => new 
        { 
         // do stuff 
        }) 
       }).ToList(); 

これはokです...しかし、私はgroup.takeを行うとき(2).Selectが.....私を与える、私のリストを制限いけない

var test = unitOfWork.ChatMensagemRepository.GetAll() 
       .Where(x => x.PessoaCodigoPessoa == codigoRemetente) 
       .GroupBy(x => x.ChatConversaCodigoChatConversa) 
       .Select(group => new 
       { 
        codigoChat = group.Key, 
        list = group.Take(2).Select(mensagem => new 
        { 
         // do stuff 
        }) 
       }).ToList(); 
"サブクエリは複数の行を返します"

エラー:サブクエリはMySQ用のためEFプロバイダ、それが発生した1以上の行

+2

投稿しないでください(HTTPSを[複製]。 com/questions/45799292/take-and-group-by-entityframework)の質問(異なるアカウントの下で) –

答えて

1

を返す:サブクエリが1以上行

var test = unitOfWork.ChatMensagemRepository.GetAll() 
       .Where(x => x.PessoaCodigoPessoa == codigoRemetente) 
       .GroupBy(x => x.ChatConversaCodigoChatConversa) 
       .Select(group => new 
       { 
        codigoChat = group.Key, 
        list = group.Select(mensagem => new 
        { 
         // do stuff 
        }).take(2) 
       }).ToList(); 

エラーを返しLまたはサーバー自体がSQLにこのLINQを翻訳することはできませんので、あなたは、最初にサーバーからデータを取得するだけにしてTake(2)のグループにそれをする必要があり:// stackoverflowの:

var test = unitOfWork.ChatMensagemRepository.GetAll() 
       .Where(x => x.PessoaCodigoPessoa == codigoRemetente) 
       //this section is added 
       .Select(x => new 
       { 
        x.ChatConversaCodigoChatConversa, 
        x.prop1,//specify only columns, which you need for below code with Take 
        x.prop2 
       }).ToList() 
       //end of section 
       .GroupBy(x => x.ChatConversaCodigoChatConversa) 
       .Select(group => new 
       { 
        codigoChat = group.Key, 
        list = group.Take(2).Select(mensagem => new 
        { 
        mensagem.prop1, 
        mensagem.prop2 
        }).ToList() 
       }).ToList(); 
関連する問題