EF匿名類Tolist 報錯

2021-09-12 05:46:42 字數 1893 閱讀 7698

遇到乙個專案問題,最後定位問題的時候,是ef新查詢出來的資料,進行了select 後skip 分頁 最後tolist()報錯,網上給的原因是匿名類轉換問題,可以在skip之前去tolist().

連續兩次被相同問題困擾。

一、舉例

var query=db.studentscore.where(r=> r.subjectid==subjectid)

.select(g=>new ).tolist();

這是一段平常的**,但有時候他會報錯:匿名類無法轉換為實體類studentscore。

1.期初,我是這麼想的:

new studentscore

var query=db.studentscore.where(r=> r.subjectid==subjectid)

.select(g=>new studentscore ).tolist();

但還是報錯!原因還是匿名類無法轉換為實體類studentscore。

問:為什麼不能轉換為自己呢?答: 難道因為實體類中有外來鍵或者字段數量上不匹配嗎。。

2.新建了乙個類

studentscoretemp 就兩個屬性 subjectid、 score

var query=db.studentscore.where(r=> r.subjectid==subjectid)

.select(g=>new studentscoretemp ).tolist();

轉換成功。

3.後來發現csdn 已經有答案

其中還記錄了另一種方法:query就是個集合,你遍歷就行了

foreach(var v in query) 遍歷的時候按自己需要重新組裝成需要的形式。

4.還發現了乙個錯誤的方法:

var query=db.studentscore.where(r=> r.subjectid==subjectid).asenumerable()

.select(new studentscoretemp() ).tolist()

錯誤原因:

asenumerable() 時會去資料庫查詢資料,相當於把資料先查詢出來到記憶體中,再在記憶體中通過select篩選。如果資料量較大是非常消耗記憶體的!

原因詳情見 :

5.新發現

var query=db.studentscore.where(r=> r.subjectid==subjectid).select(g=>g).tolist();
這樣可以查詢所有字段

6.還發現 select的時候,時間無法轉換成 年月日 yymmmdd

解決1:先tolist到記憶體,然後再次select時可以轉換。

解決2: 先匿名類接收資料, foreach迴圈或for 迴圈遍歷的時候按自己需要重新組裝成需要的形式。(3中的發現是有用滴!)

7.又發現ef複雜查詢好難呀!

這是對ef拉姆達表示式和linq語法不熟悉是很費時間的,其實可以

1直接在資料庫中建立檢視。

2ef也可以直接寫sql語句

//1)查詢sqlquery

result.sllist = db.database.sqlquery< datatemp>(「select precision,year,landcover, sum(area) as area from [ecotypes] where landcover=@type group by precision, year, landcover」, new sqlparameter("@type", 「森林」)).select(d=> d.area).tolist();

//2)增刪改:executesqlcommand

db.database.executesqlcommand("").tostring();

匿名物件和匿名類

一,匿名物件 匿名物件 沒有名字的物件 new car 匿名物件其實就是定義物件的簡寫格式。car c new car c.run 用匿名物件來書寫以上 new car run 匿名物件的使用方法 1 當物件對方法僅進行一次呼叫的時候,就可以簡化成匿名物件。如乙個 物件需要進行呼叫方法2次,用匿名物...

EF 篩選列包含NULL會報錯

當planno 為空時,我們在ef查詢篩選planno列時,會報錯 expressionbool expr predicateextensionses.true 動態拼接查詢 靜態類的使用步驟 expr.and c c.isdel 1 if kname.isempty 出貨計畫單號查詢 這裡plan...

內,外,匿名類

1,單詞 arithmetic 算數,演算法 leak洩露 2,內部類介紹 1 在類中再定義乙個類。按著位置不同,分為 2種情況 a 成員位置 成員內部類,方法外 b 區域性位置 區域性內部類,方法內 2 在區域性位置的本地變數,或者區域性變數,只能使用 final 修飾,不能使用 private,...