2012-03-16 51 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