LINQ to Entity Child查询Parent具有特定属性的位置
使用C#和LINQ实体我有一个孩子和父母实体搜索问题。 在概念上,我试图获得IEnumerable儿童的集合,这些儿童具有某些属性,而且这些儿童的父母也具有某些属性。
具体而言,我有路线和街道,它们之间有多对多的关系。 我试图找到街道上的街道具有LeftNote或RightNote的积极属性的特定路线(LeftNote和RightNote是字符串,我正在搜索不是空白的字符串)。
我有以下实体(为了清晰起见而减少)
public class Route
{
public int RouteID { get; set; }
public virtual ICollection<Street> Streets { get; set; }
}
public class Street
{
public string LeftNote { get; set; }
public string RightNote { get; set; }
public virtual ICollection<Route> Routes { get; set; }
}
我有以下LINQ表达式:
var streets = this.repository.Routes
.Where(r => r.RouteID == routeId).FirstOrDefault()
.Streets
.Where(s => s.LeftNote.Length > 0 || s.RightNote.Length > 0);
这完美的工作,直到我运行此对路线存在的实体数据,但没有街道有LeftNotes或RightNotes。 在这些情况下,我得到一个NullReference异常。 我试图找到一种方法来正确表达这个查询处理与LeftNotes街道的缺席(应始终存在一个匹配routeId的路由,如果不是这是一个有效的异常情况,应该抛出和错误)。
编辑︰问题似乎是围绕空字符串,而不是任何有关的LINQ构造。
你的意思是吗?
var streets = repository.Streets.Where
(s => s.Routes.Any(r => r.RouteID == routeId )
&& (s.LeftNote.Length > 0 || s.RightNote.Length > 0));
var streets = this.repository
.Routes
.Where(r => r.RouteID == routeId).FirstOrDefault()
.Streets
.Where(s => s.LeftNote !=null ? s.LeftNote.Length > 0 : false
|| s.RightNote !=null ? s.RightNote.Length > 0 : false);
没有对它进行测试,但认为它应该起作用。
要么
this.repository.Streets(s=>(s.LeftNote.Length >0 || s.RightNote.Length > 0 )
&& s.Routes.routeId==routeId));
只需使用String.IsNullOrEmpty()。
var streets = this.repository
.Routes
.Where(r => r.RouteID == routeId).FirstOrDefault()
.Streets
.Where(s => !String.IsNullOrEmpty(s.LeftNote) ||
!String.IsNullOrEmpty(s.RightNote));
链接地址: http://www.djcxy.com/p/37651.html
上一篇: LINQ to entities Child queries where Parent has certain properties