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}

我正在尝试编写一个 LINQ 语句,该语句将仅过滤掉具有值 1 和 2 的“r”并返回“v”的整数/字符串的集合

这就是我正在尝试做的事情,我的问题在于我想将转换为仅包含相应“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

我猜 v 已经是一个 int 了。所以解决方案很简单:

var result =  roles.Where(r => r.r == 1 || r.r == 2).Select(i => i.v).ToList();
于 2013-05-08T10:19:40.850 回答
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 回答
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 回答