iT邦幫忙

0

[已解決] 如何使用OrderBy排序?

調整為如下即可,請參考。

var Option1=Subject.FindInstances("Options").Cast<dynamic>().First(x => 1==x.Edition);`

Option1.Options=(
	from dynamic option in (dynamic[])Option1.Options
	orderby option.Value
	select option).ToArray();

如下為原本的問題內容

//-------------------------------------------------
正在嘗試自己練習MVC的View,在實作以下時有碰到問題--

假設我從資料庫撈出條件為Edition=1Options
var Option1=Subject.FindInstances("Options").Cast<dynamic>().First(x => 1==x.Edition);

我嘗試使用以下方式排序(.OrderBy),程式撰寫但不正確:
var Option1=(Subject.FindInstances("Options").Cast<dynamic>().First(x => 1==x.Edition)).Options.OrderBy(y => y.Index);

先找出資料再另外排序,程式撰寫不正確:
var NewOption1 = Option1.Options.OrderBy(x => x.Index);

先排序再找出資料,執行會報錯:
var Options=Subject.FindInstances("Options").Cast<dynamic>().OrderBy(x => (x.Options)?.Options.Index).First(x => 1==x.Edition);

資料長的是這樣:
https://ithelp.ithome.com.tw/upload/images/20190829/20115336GalHSkrIjc.jpg

請問如何在找出資料時就依照條件(x.Index)排好順序呢?

看更多先前的討論...收起先前的討論...
暐翰 iT邦大師 1 級 ‧ 2019-08-29 15:05:49 檢舉
 
優悠 iT邦新手 4 級 ‧ 2019-08-30 10:49:51 檢舉
把FIRST換FirstOrDefault
優悠 iT邦新手 4 級 ‧ 2019-08-30 10:51:06 檢舉
另外,若FIRST換成where().OrderBy().ToList(),換更好
anniecat iT邦新手 3 級 ‧ 2019-08-30 16:44:00 檢舉
謝謝優悠的優化~不知道以下的理解是對的嗎?
若是允許找回的資料是空的則可以撰寫為FirstOrDefault
若是將來可能會修改資料等則可以寫成ToList()

2 個回答

0
小魚
iT邦大師 1 級 ‧ 2019-08-29 12:25:26

應該要先OrderBy吧,
你都取First了還要排序什麼?

anniecat iT邦新手 3 級 ‧ 2019-08-29 12:33:46 檢舉

我是先從多個Options中取出一個條件為Edition=1的Options,再去用Index排序此筆Options的資料
所以會先用First取出一筆再做OrderBy
我有先嘗試過先OrderBy再First,執行時會報錯
請問若是這樣的用法可能要怎麼做調整呢?

0
暐翰
iT邦大師 1 級 ‧ 2019-08-29 15:09:36
  • FindInstances 是哪一個框架的方法呢? 要看他有沒有實作LINQ SQL
  • 麻煩提供完整錯誤訊息
anniecat iT邦新手 3 級 ‧ 2019-08-29 17:22:21 檢舉

謝謝暐翰,我找到方法做了!

我要發表回答

立即登入回答