【问题标题】:ObjectQuery to return object where a child object contains a set valueObjectQuery 返回子对象包含设定值的对象
【发布时间】:2012-01-14 11:11:21
【问题描述】:

我有两个类,如下:

public class Route
{
    public ObservableCollection<Flight> Flights = new ObservableCollection<Flight>();
}

public class Flight
{
    string airlineName;
}

我希望返回由指定航空公司运营的所有航线的列表。

我尝试做 Routes.SelectMany(x =&gt; x.Flights).Where(x =&gt; x.Airline == airline); 但这会返回所有飞行对象 - 我需要路线对象...

谁能解释我如何使用 ObjectQuery 做到这一点?提前致谢!

【问题讨论】:

  • 你的两个课程都处理航班,所以我看不到你在哪里获得路线信息你在哪里分配路线

标签: c# linq objectquery


【解决方案1】:

听起来像你想要的:

Routes.Where(route => route.Flights.Any(flight => flight.Airline == airline))

【讨论】:

  • 谢谢你的回答,可惜RedHat的手指比较快,所以我先接受他的。
  • @GavinCoates:根据时间戳,我实际上在 RedHat 之前 31 秒发布了答案,但我不介意:)
【解决方案2】:
Routes.Where(x =>x.Flights.Any(p=> p.Airline == airline))

【讨论】:

  • 谢谢,它可以工作并返回预期的结果,但是我收到以下错误:Unable to cast object of type 'WhereEnumerableIterator1[Route]' to type 'System.Collections.ObjectModel.ObservableCollection1[Route]'.
  • 好吧,如果我这样做 var result = 那么它可以工作,如果我调试 result 变量包含一组路由,正如预期的那样。但我需要在一个返回 ObservableCollection&lt;Classes.Route&gt; 的函数中使用它 - 但是转换到这个失败并出现提到的错误
  • 谢谢,解决了。作为参考,返回的对象是一个通用的 IEnumerable,因此要转换为 ObservableCillection,您只需要:ObservableCollection&lt;Classes.Route&gt; collection = new ObservableCollection&lt;Classes.Route&gt;(result);(其中结果是原始答案中的查询结果)
猜你喜欢
  • 2020-11-13
  • 2018-06-14
  • 1970-01-01
  • 2021-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
  • 1970-01-01
相关资源
最近更新 更多