2

C# .Net Web アプリがあり、次の LINQ クエリを使用して、ユーザーが作成したか、さまざまなユーザー ロールを持つ提案の個別のリストを取得しています。返されるリストには、Union と Distinct の後でも同じ提案の重複が含まれています。私は何を間違っていますか?

      var thereturn = FindAll(DetachedCriteria.For<Proposal>(),
                             new Order("CreateDate", false));

     //get the proposals that aUser created
     IList<Proposal> it = 
                thereturn.Where(proposal => proposal.CreatedBy.Equals(aUser)).ToList();

     //get the proposals that aUser is a BOE Author
     IList<Proposal> it2 =
          thereturn.Where(proposal =>
              proposal.BOEs.Any(boe =>
                  boe.Users.Where(a => a.Name == aUser).Any())).ToList();
     //get all other proposals that aUser is on
     IList<Proposal> it3 = 
          thereturn.Where(proposal =>
              proposal.Users.Where(o => o.Name == aUser).Any()).ToList();
     //now union with all other proposals that aUser is on
     return it3.Union(it).Union(it2).
               OrderByDescending(o=>o.CreateDate).Distinct().ToList();
4

1 に答える 1

2

Proposalクラスの定義は何ですか?Proposalクラスのデフォルトの等価演算子に問題がある可能性があります。msdn が Distinct について述べているように:

デフォルトの等値比較子を使用して値を比較することにより、シーケンスから個別の要素を返します。

編集: つまり、Equalsand/orのカスタム実装はありGetHashCodeますか?

于 2012-04-16T19:35:45.747 に答える