2

List<UserRoles> rolesこの構造を持つリストがあります

{r:1,u:1,v:3},
{r:1,u:1,v:5},
{r:2,u:1,v:9},
{r:3,u:2,v:10}

値が 1 と 2 の "r" のみを除外し、"v" の int/string のコレクションを返す LINQ ステートメントを作成しようとしています。

これは私がやろうとしていることであり、私の問題は、対応する「v」のみを保持するものに変換したい部分にあります。

 List<Int32> =  roles.Where(r => r.r == 1 || r.r == 2)
                     .Select(i => new Int32{id = i.v});

これは、不明なエラーでコンパイルされません'id'

私が必要とする最終結果はこれです:

List<Int32>

{v:3},
{v:5},
{v:9}
4

4 に答える 4

5

次のリストが必要なようですint

 List<int> result = roles.Where(r => r.r == 1 || r.r == 2)
                         .Select(i => i.v)
                         .ToList();

intフィルタリングするリストがある場合は、Containsメソッドを使用して多くのを回避でき||ます。

var filters = new[] { 1, 2};

List<int> result = roles.Where(r => filters.Contains(r.r))
                        .Select(i => i.v)
                        .ToList();

または、必要な場合は、キーワードで匿名型{v:9}使用できます。var

var result = roles.Where(r => filters.Contains(r.r))
                        .Select(i => new { i.v })
                        .ToList();
于 2013-05-08T10:19:21.967 に答える
1

匿名オブジェクトの配列が必要な場合は、次を使用します。

var res =  roles.Where(r => r.r == 1 || r.r == 2).Select(i => new{i.v}).ToList();

これにより、 という単一のプロパティを持つオブジェクトのリストが生成されvます。

整数のリストを探していてvint元のクラスにある場合は、これを使用します。

var res =  roles.Where(r => r.r == 1 || r.r == 2).Select(i => i.v ).ToList();
//                             note that there's no new here ^^^^^
于 2013-05-08T10:20:04.127 に答える
1

v はすでに int だと思います。したがって、解決策は次のように簡単です。

var result =  roles.Where(r => r.r == 1 || r.r == 2).Select(i => i.v).ToList();
于 2013-05-08T10:19:40.850 に答える
0

迷惑なタイプを使用しましたが、そのInt32前に追加しましたが、これは違法です。

 List<Int32> results = roles.Where(r => r.r == 1 || r.r == 2)
                            .Select(i => new { i.v }).ToList();
于 2013-05-08T10:20:42.443 に答える