2012-03-16 64 views
0

我有下面的代码力实体返回NULL如果singleResult抛出异常

return (EseshEntities.Current.Users.Select(u => new { Comunity = u.Apartment.Building.District.City })).ToList(); 

如果建筑是空的,然后我们得到了错误时抛出的COS不能存取权限的空权的财产? 但实体中有没有任何选项的excmance返回null,所以如果属性 不存在,那么返回null?

+0

为什么不在选择不返回任何空值之前构建where子句? – 2012-03-16 14:11:04

+0

使用DefaultIfEmpty而不是选择 – 2012-03-16 14:13:06

+0

我猜他会希望所有用户,无论他们是否Comunity = null或不。我想你无法绕过null检查。 – KroaX 2012-03-16 14:13:47

回答

2

这个怎么样?

return (EseshEntities.Current.Users.Select(u => new { Comunity = u.Apartment.Building ==null?null:u.Apartment.Building.District.City })).ToList(); 
+0

同意,似乎没有另一种方式 – KroaX 2012-03-16 14:52:29

+0

yee但看看这里我们有u.Apartment.Building.District.City四个属性,所以这看起来真的很复杂,检查它们都是可惜的,一个选项是如果null,那么即使foreig键为空也是默认的。 – kosnkov 2012-03-16 15:53:48

+0

属性只是方法的包装器,因此如果没有实例,则不能调用非静态方法 – 2012-03-16 16:05:53

1

你可以尝试这样的事情:

var list = (from u in EseshEntities.Current.Users 
      where u.Apartment.Building != null 
      select new { Comunity = u.Apartment.Building.District.City }).ToList(); 
return list; 

,或者你可以试试这个:

return (EseshEntities.Current.Users.Select(u => new { Comunity = u.Apartment.ToInstance().Building.ToInstance().District.ToInstance().City })).ToList(); 

public static T ToInstance<T>(this T self) 
{ 
    T mySelf = default(T); 

    if (self != null) 
     mySelf = self; 
    else 
     mySelf = Activator.CreateInstance<T>(); 

    return mySelf; 
} 
+0

不,我问我也查询关于userName或其他用户的几个属性,这样我将排除所有这些用户不具有建筑物财产。 – kosnkov 2012-03-16 14:20:05

+0

我明白了,你是否尝试初始化实体类的custructor中的每个属性?这样他们不是null。 – 2012-03-16 14:31:40

+0

我修改了我的代码。查看可能对您有帮助的更改。 – 2012-03-16 15:05:33