2010-01-13 60 views
4

期望記錄集(> = 1條記錄)時,如何檢查0記錄情況?實體框架 - ToList()和0記錄

例如:

RivWorks.Model.FeedStoreReadOnly store = new RivWorks.Model.FeedStoreReadOnly(AppSettings.FeedAutosEntities_connString, AppSettings.FeedAutosEntities_metadata, AppSettings.FeedAutosEntities_providerName); 
RivWorks.Model.NegotiationAutos.Entities _dbFeed = store.ReadOnlyEntities(); 
var companyDetails = from a in _dbFeed.ClientClientMap where a.CompanyID == CompanyId select a; 
return companyDetails.ToList(); 

當它返回它是在ToList(),因爲沒有記錄是滿足WHERE子句示數出來。那麼,檢查0條記錄的正確方法是什麼?以及此時建議的回報是多少?


加入下面的答案基於關:

if (companyDetails.Count() > 0) 
    return companyDetails.ToList(); 
else 
{ 
    List<RivWorks.Model.NegotiationAutos.ClientClientMap> ret = new List<RivWorks.Model.NegotiationAutos.ClientClientMap>(); 
    ret.Add(companyDetails.FirstOrDefault()); 
    return ret; 
} 

還沒有測試,但該(邏輯)似乎工作。想知道是否有更簡單的方法。


注意

我想通弄明白了。 SQL所運行的帳戶沒有被DBA授予正確的權限集。我們更改了新表/視圖上的所有GRANT語句,現在它正在工作。

儘管如此,我仍然不確定什麼是正確的答案。我努力創造一個空白(新)記錄並添加到列表中,這樣我們的球員接受列表有東西扶着顯示(爲編輯,如果沒有別的)...

+0

你確定例外嗎?它不應該出錯,它應該返回一個包含0條記錄的列表。 – 2010-01-13 22:50:02

+0

你得到的例外是什麼? – mxmissile 2010-01-13 22:50:54

+0

在內部異常我得到「無效的對象名稱'dbo.ClientClientMap'」。我不理解這個錯誤,因爲我可以在模型中看到對象,並且可以很好地引用它。 – 2010-01-13 23:23:54

回答

5

致電ToList之前,您無需檢查是否有空。 ToList可正常使用不返回任何記錄的查詢;它只會返回一個空的列表。你可以使用你的原始代碼,並且一切都可以正常工作,無論表中有沒有數據。

大多數網格等也可以應付罰款清單;他們通常會爲用戶顯示一個空行以創建第一條記錄。

0

ClientClientMap表不是在數據庫

+0

au contrair。它的確在數據庫中,並且是一個View。我的模型是通過EF嚮導生成的,我沒有爲其添加任何其他非數據庫派生對象。我遇到了幾個綁定到表的對象的問題。 – 2010-01-14 00:08:26

+0

@Keith,也許你的實體模式沒有更新,但你的異常與它是一個空的結果無關,要測試這個嘗試返回一個結果與行。檢查你的連接字符串,確保你指向正確的數據庫。 – 2010-01-14 00:50:30

+0

權限(SELECT/UPDATE)沒有爲在SQL Server中運行請求的帳戶設置(請參閱上文)。 – 2010-01-14 05:45:40

0

另一個原因可能是與數據庫的連接字符串包含的數據庫名稱不同於您打算使用的名稱。實體框架(如果它被配置有權這樣做)只是根據配置的連接字符串創建一個不同的數據庫,並且可能會發生您查詢的表爲空的情況。