2011-12-14 16 views
0

我的結果返回null。Linq查詢返回null。想不通爲什麼

IEnumerable<DataRow> result = (from r in db.vedhaeftedeFilers.AsEnumerable() where r.beskedId == id select new { r.filnavn, r.filtype, r.data })as IEnumerable<DataRow>; 

有數據庫中的數據,並且id是正確的。我猜測它有 與我使用IEnumerable有關,但無法找出問題所在。

回答

4

as運算符將返回null如果傳遞的對象是不實際的IEnumerable<DataRow>,它顯然不是因爲你伸入匿名類型與select new { ... }

另外,AsEnumerable()調用會使數據庫表的行爲像一個啞數組,從而毀掉你的性能。

你究竟想在這裏做什麼?

+0

即時通訊嘗試將我的結果傳遞給數據表 – 2011-12-14 13:16:07

0
select new { r.filnavn, r.filtype, r.data } 

與只讀屬性filnavnfiltypedata創建一個匿名類型。因此,LINQ理解表達式(from ... select)的類型是IEnumerable<anonymous>

這種類型不執行IEnumerable<DataRow>,所以Jon注意到,它將返回null

0

當你這樣做:

select new { r.filnavn, r.filtype, r.data }

...你是返回一個匿名類型的集合。這是一個問題,因爲您試圖將此集合投射到IEnumerable<DataRow>。由於您使用as進行強制轉型,它會「無聲地死亡」並返回null,因爲使用as關鍵字進行強制轉型時,如果強制轉型失敗,則不會拋出InvalidCastException(而不是像MyClass x = (MyClass)MyObj那樣進行拋出)。

試試這個:

var result = (from r in db.vedhaeftedeFilers.AsEnumerable() where r.beskedId == id select new { r.filnavn, r.filtype, r.data });

通知我用var,並沒有試圖將結果轉換爲一個類型。