LINQ选择不按预期工作

时间:2016-02-17 18:48:14

标签: c# linq

我正在尝试过滤多个属性上的列表,然后使用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; }
}

2 个答案:

答案 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