我正在尝试过滤多个属性上的列表,然后使用LINQ输出单个属性的列表。
我可以使用以下行
获得所需的(未过滤的)输出var query = l.Select(x => x.prop4).ToList();
但是,在几个Where
子句之后使用它会给我一个TestObject的prop4列表的列表
请有人解释为什么会发生这种情况以及如何解决这个问题?
示例代码:
class Program
{
static void Main(string[] args)
{
List<TestObject> l = new List<TestObject>();
for (int i = 0; i < 10; i++)
{
l.Add(new TestObject() { prop1 = i, prop2 = i, prop3 = i, prop4 = i});
}
//var query = l.Select(x => x.prop4).ToList(); //Correct output type but unfiltered!!
var query = l.Where(x => x.prop1 > 2);
query = query.Where(x => x.prop2 > 4);
query = query.Where(x => x.prop3 > 6);
query.Select(x => x.prop4).ToList(); //Outputs List of TestObject and not List of prop4
}
}
public class TestObject
{
public int prop1 { get; set; }
public int prop2 { get; set; }
public int prop3 { get; set; }
public int prop4 { get; set; }
}
答案 0 :(得分:4)
您没有更新您的查询,可以保留对您的属性列表的引用,因此您的结果会在内存中丢失:
var result = query.Select(x => x.prop4).ToList();
// now use result to do what needed
答案 1 :(得分:3)
您没有分配查询的值。选择任何内容: 试试这个:
var t = query.Select(x => x.prop4).ToList(); //Outputs List of TestObject and not List of prop4
t.ForEach(Console.WriteLine);
输出: 7 8 9