从Linq过滤器创建列表

时间:2015-06-14 11:45:34

标签: c# linq

我目前正在过滤掉由JSON数据填充的List:

List<RootObject> FlightTimes = (List<RootObject>)GridView1.DataSource;
foreach (var v in from p in FlightTimes
                  where p.Direction == "A"
                  select new { p.Date, p.Time, p.SortTime, p.Direction, p.FlightNumber, p.Endpoint, p.Status, p.Status2 }) ;

我在尝试将foreach中的数据放入新列表时遇到了麻烦。任何人都可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

问题是你的循环产生了匿名类型的元素,所以你不能为它声明一个正确类型的列表。您可以通过不使用foreach并将查询结果发送到ToList来解决此问题:

var myList = (
    from p in FlightTimes
    where p.Direction == "A"
    select new {
        p.Date
    ,   p.Time
    ,   p.SortTime
    ,   p.Direction
    ,   p.FlightNumber
    ,   p.Endpoint
    ,   p.Status
    ,   p.Status2
    }
).ToList();

现在,编译器有足够的信息来捕获列表的类型,从而产生您期望的结果。如果您需要在循环中执行其他处理,请在单独的myList循环中使用foreach

答案 1 :(得分:0)

如果您要做的只是获取Direction == "A"对象的列表,您可以将其重构为:

var FlightTimes = ((List<RootObject>)GridView1.DataSource)
    .Where(ft => ft.Direction == "A").ToList();