我有一个具有此结构的列表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&amp;的“r”。 2并返回“v”s
的整数/字符串集合这就是我想要做的事情,我的问题出现在我想要转换为仅包含相应“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}
答案 0 :(得分: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();
答案 1 :(得分:1)
我猜v已经是一个int了。 所以解决方案就像:
var result = roles.Where(r => r.r == 1 || r.r == 2).Select(i => i.v).ToList();
答案 2 :(得分:1)
如果你想要的是一组匿名对象,请使用:
var res = roles.Where(r => r.r == 1 || r.r == 2).Select(i => new{i.v}).ToList();
这将产生一个对象列表,其中包含一个名为v
的属性。
如果您要查找整数列表,并且v
在原始班级中是int
,请使用此选项:
var res = roles.Where(r => r.r == 1 || r.r == 2).Select(i => i.v ).ToList();
// note that there's no new here ^^^^^
答案 3 :(得分:0)
您使用了匿名类型,但之后在其前面添加了Int32
这是非法的。
List<Int32> results = roles.Where(r => r.r == 1 || r.r == 2)
.Select(i => new { i.v }).ToList();