C# 从Linq过滤器创建列表

C# 从Linq过滤器创建列表,c#,linq,C#,Linq,我目前正在筛选一个由JSON数据填充的列表: 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.

我目前正在筛选一个由JSON数据填充的列表:

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 }) ;
List FlightTimes=(List)GridView1.DataSource;
foreach(飞行时间中从p到v的var)
其中p.方向==“A”
选择新{p.日期、p.时间、p.排序时间、p.方向、p.航班号、p.终点、p.状态、p.状态2});

我在尝试将foreach中的数据放入新列表时遇到问题。有人能帮上忙吗?

问题是循环生成匿名类型的元素,因此无法为其声明正确类型的列表。您可以通过不使用
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();

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

如果您只想获得具有
方向==“a”
的对象列表,则可以将其重构为:

var FlightTimes = ((List<RootObject>)GridView1.DataSource)
    .Where(ft => ft.Direction == "A").ToList();
var FlightTimes=((列表)GridView1.DataSource)
其中(ft=>ft.方向==“A”).ToList();

有什么问题?错误是什么?你试过什么?我不知道从哪里开始我以前没用过linq。你想做什么?如果您不知道如何使用linq,您应该阅读linq教程
RootObject
对于一个似乎包含航班详细信息的类来说似乎不是一个很有描述性的名称。这可能有很好的理由,但如果不是的话,你可能想重新考虑一下。