1

オブジェクトのリストがあり、ユーザーと言えます。

public class User
{
public string Name {get;set;}
public string Sex {get;set;}
public DateTime Birthday {get;set;}
public string Type {get;set;}
public string SubType {get;set;}
public int FilterId {get;set;}
}

次の結果があるとしましょう

Josh, M, 5/1/1980, Admin, Main, null
John, M, 5/1/1980, User, Main, null
Jane, F, 5/2/1980, User, Main, null
Josh, M, 5/1/1980, Admin, Main 1
John, M, 5/1/1980, User, Main, null
Josh, M, 5/1/1980, User, Main, null

次の結果を取り戻したいと思います。

Josh, M, 5/1/1980, Admin, Main 1
John, M, 5/1/1980, User, Main, null
Jane, F, 5/2/1980, User, Main, null
Josh, M, 5/1/1980, User, Main, null

重要な部分は、FilterId が null でない場合に Josh のレコードを返すことです。Order By と firstordefault を使用した Group By のようなものを考えました。

複数のフィールドを含む groupby 句を記述して、それを適切に機能させるのに問題があります。

groupby の一部である必要がある追加のプロパティを反映するように例を変更しました。

4

4 に答える 4

0

複数のプロパティでグループ化する最も簡単な方法は、匿名型を使用することです。

var groups = users.GroupBy(user => new
    {
        Name,
        Type,
        SubType,
    });

これが機能するのは、匿名型の実装がメソッドをオーバーライドしEqualsて型の各メンバーの値を比較し、メソッドをオーバーライドしGetHashCodeてオブジェクトのすべての値のハッシュの複合ハッシュにするためです。新しい名前付き型を作成したばかりの場合、そのすべてを自分で処理する必要があり、単純に面倒です。

于 2013-09-13T18:31:48.657 に答える