遇到乙個專案問題,最後定位問題的時候,是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,...