在LINQ中對中文進行特定順序的排序
在LINQ中對中文進行特定順序的排序
.NET 開發 > ADO.NET 與 LINQ常規討論
0 登入進行投票大家好,想向大家請教一下LINQ中隊中文的排序問題。我只知道排序是按拼音進行的,模擬一下我的需求,現在有這樣一個數組
varstrArr = new String[] { "三", "一", "四", "五", "二", "六" };
想用LINQ排成 “一二三四五六” 的順序,請問有辦法實現嗎?
謝謝
————————————
2014年3月20日 更新
可能是我之前的例子舉的不太好啊……隨手就打了這些個中文數字,誤導了大家,自己也沒把需求說明白
實際上是這樣的,表中有一列記錄的是狀態,再舉個例吧。。例如狀態有“新建”、“進行”和“完成”三種(實際中有更多),每次LINQ查詢出來後按預設排序都是“進行”在前,我想讓“新建”在最前面,有辦法實現嗎?
謝謝。
————————————
還是 2014年3月20日 ,想到一個辦法,就是比較繁瑣,通過在Order方法裡面寫三目運算子可以生成CASE..WHEN..THEN語句,突發奇想試了一下發現可以,程式碼如下
(from t in table select t).OrderBy(t => (t.State.Equals("新建") ? 1 : (t.State.Equals("進行") ? 2 : (t.State.Equals("完成") ? 3 : 4))))
但是這樣子寫維護起來太麻煩了吧,有沒有好的推薦,或者是LINQ提供了更好的方法?
謝謝大家了。
- 已編輯 huhubun 2014年3月20日 6:30 想到一個新方法
- 已更改型別 Fred BaoModerator 2014年3月21日 7:21
全部回覆
- 0 登入進行投票 大寫數字這種,只能自定義規則排序吧 2014年3月13日 4:43 回覆 | 引用 saaavsaaa 10 分數
-
0
登入進行投票
http://blog.sina.com.cn/s/blog_63e177c50101504v.html
請參照上面的C#大寫中文轉成數字(萬位以下適用),再使用
var strArr = new String[] { "三", "一", "四", "五", "二", "六" }; strArr = strArr.OrderBy(x => GetNumber(x)).ToArray();
就可以將大寫中文排序。
2014年3月13日 5:29 回覆 | 引用 David Kuo 725 分數 -
0
登入進行投票
謝謝,不好意思沒有及時回覆。
可能是我的例子舉的不太好……隨手就打了這些個中文數字 =。=
實際上還有這樣的,例如表中有一列記錄的是狀態,再舉個例吧。。例如狀態有“新建”、“進行”和“完成”三種(實際中有好多種),每次LINQ查詢出來後按預設排序都是“進行”在前,我想讓“新建”在最前面,有辦法實現嗎?
謝謝。
2014年3月20日 4:14 回覆 | 引用 huhubun 5 分數 -
0
登入進行投票
呃,我自己想到一個辦法,是利用在LINQ方法裡面書寫三目運算子能被理解成CASE..WHEN..THEN的SQL語句來實現的,試了一下沒有問題,就是做起來太繁瑣,也不好維護,程式碼如下
(from t in table select t).OrderBy(t => (t.State.Equals("新建") ? 1 : (t.State.Equals("進行") ? 2 : (t.State.Equals("完成") ? 3 : 4))))
還希望大家探討一下,謝謝了
2014年3月20日 6:32 回覆 | 引用 huhubun 5 分數 -
0
登入進行投票
呃,我自己想到一個辦法,是利用在LINQ方法裡面書寫三目運算子能被理解成CASE..WHEN..THEN的SQL語句來實現的,試了一下沒有問題,就是做起來太繁瑣,也不好維護,程式碼如下
(from t in table select t).OrderBy(t => (t.State.Equals("新建") ? 1 : (t.State.Equals("進行") ? 2 : (t.State.Equals("完成") ? 3 : 4))))
還希望大家探討一下,謝謝了
Hi,你可以用一個字典來儲存不同內容預定義的次序值,比如
private Dictionary<string, int> _priorityDic = new Dictionary<string, int>(); ... _priorityDic["新建"] = 1; _priorityDic["進行"] = 2; _priorityDic["完成"] = 3; ... (from t in table select t).OrderBy(t => _priorityDic.ContainsKey(t.State.ToString()) ? _priorityDic[t.State.ToString()] : Int32.MaxValue)
這樣以後要修改是,只需要更改字典的內容就可以了,不需要更改排序的程式碼。
2014年3月21日 10:43 回覆 | 引用 lapheal 14,720 分數 -
0
登入進行投票
您好,非常感謝回覆。
不過我嘗試了一下發現會報錯:System.NotSupportedException: LINQ to Entities 不識別方法“Boolean ContainsKey(System.String)”,因此該方法無法轉換為儲存表示式。
LINQ沒法轉換這個方法吧。不過還是很謝謝提供這樣一種思路!
相關推薦
在LINQ中對中文進行特定順序的排序
在LINQ中對中文進行特定順序的排序 .NET 開發 > ADO.NET 與 LINQ 常規討論
Oracle中針對中文進行排序
session ica tro dex 生效 cep exception 進制 pinyin 在oracle 9i之前,對中文的排序,是默認按2進制編碼來進行排序的. 9i時增加了幾種新的選擇: 按中文拼音進行排序:SCHINESE_PINYIN_M 按中文部首進行排序:
java中對ArrayList進行排序
java中的ArrayList需要通過collections類的sort方法來進行排序 如果想自定義排序方式則需要有類來實現Comparator介面並重寫compare方法 呼叫sort方法時將ArrayList物件與實現Commparator介面的類的物件
iOS中對字典進行排序
iOS中字典實際上是無序的,那麼如果我們要對字典進行排序要怎麼做呢? 程式碼如下: [objc] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片 <span style="font-size:18px;"> @int
C#中對DataTable進行全連接後group by,orderby
orderby utime mp3 var c# put enume enum solver var result = from temp2 in ( f
在LinuxMint中對firefox進行手動安裝flash插件
set 手動 ams flash linu 4.3 trac 插件 啟動 /********************************************************************* * Author : Samson *
【java】spring項目中 對entity進行本類間的克隆
tor mini cti false display des private rac 重寫 方法1: 【使用spring自帶BeanUtils實現克隆】 【要求:需要被克隆的類實現Cloneable接口並且重寫clone()方法】 》例子: 》》實體: package
將集合中對象按特定符號分隔成字符串
gradle nbsp lis 集合 log googl 最終 字符 結果 List<String> list =new ArrayList(); list.add(“ab”); list.add("cd"); String str = Joiner.on(",
C#中對sqlserver進行增刪改查操作(簡單易懂)
uid 數據連接 net cti ade 密碼 logs where Go 1、添加引用using System.Data;using System.Data.SqlData;2、建立於數據庫的連接,建議將它做成一個方法,方便多次利用。string sqlconnectio
在C#中對列舉進行位運算--列舉組合
由於列舉的基礎型別型別為基本的數值型別,支援位運算,因此可以使用一個值表示多個列舉的組合,在定義列舉時需要指定列舉數為2的冪指數方便進行位運算,即列舉數為1,2,4,8…,或1,1<<1,1<<2…: public enum MyEnum { MyEnum1 = 1
jsp中對資料進行批量刪除操作
批量刪除的SQL:delete from user where uid in(主鍵列表); UserBiz: //批量刪除 public boolean batchDelete(String[] uids); UserBizImpl: public
怎麼在CAD編輯器中對圖紙進行放大縮小?
怎麼在CAD編輯器中對圖紙進行放大縮小?現在建築設計師們在編輯CAD圖紙的時候都是根據客戶的需求來進行繪製的,所以說繪製完成之後還是需要交給你的客戶進行檢視,但是大家都知道建築設計師們都是藉助CAD編輯器來進行繪製的,CAD的操作視窗有一定的限制,所以在檢視CAD圖紙的時候並不能一次性檢視全部,那怎麼在CAD
在小程式中對圖片進行縮放時發生的問題記錄
在做一個小程式時,需要實現不規則的熱點,分別用於實現各自的點選事件。 1、第一種做法:在圖片載入完成後,計算實際縮放比例,然後重新計算每個熱區的尺寸和位置。 <view class="rmq_bg"> <image src="../../asset/img/main_bg.j
利用物件對陣列進行去重排序
第一家公司: 上海莘亮網路科技有限公司 問題:1資料內嵌瞭解多少 2.熟悉php框架thinkcmf &nb
如何在CAD中對圖紙進行圖案填充
在我們進行CAD繪圖中編輯完CAD圖紙後,都需要再一次的對CAD圖紙進行檢視,在檢視的過程中,我們為了讓CAD圖紙更加的生動形象,需要把圖紙中的圖形進行填充一下,那如何在CAD中對圖紙進行圖案填充呢?大家都知道嗎?如果不知道的小夥伴們,就和小編一下來看看下面的操作步驟吧,希望對你們有用。 第一步:開啟電腦,
Oracle OCP 學習日誌-對資料進行限制和排序-02
字串和日期 字串和日期在單引號內; 字元區分大小寫,日期區分格式; 預設日期何氏為DD-MON-RR。 SELECT last_name FROM employees WHERE hire_date = '17-FEB-96' ; 比
使用libpng直接在記憶體中對資料進行png編解碼
由於工作需要,需要在記憶體中直接對資料進行png編碼,然後再解碼以測試其解碼的速度,與現有的影象壓縮方法進行比較。由於初次接觸libpng,而網上這種直接在記憶體中操作的文章並不多,從頭學習要花不少的時間。鑑於此,我藉助第3方庫:opencv庫,來學習opencv是怎麼在記憶體中對資料進行操作的(open
Vue專案中對axios進行封裝以及api介面請求
對axios進行封裝: /* 定義一個ajax請求函式,並且其返回值: promise物件(非同步返回的資料是: response.data) */ import axios from 'axios'; export default function ajax (
在golang中對rabbitmq進行測試,測試每個連線可建立的通道數量
rabbitmq環境:3.7.7,三臺個人開發機組成的叢集,使用haproxy代理轉發 進行生產者測試,測試在go中可以連線rabbitmq的協程數。測試了四種情況 第一種:建立amqp連線不關閉,加鎖建立channel,channel不關閉,一共可以建立2048個cha
React中對專案進行打包後,無法進用serve-s build進行修改路徑
前提:已經安裝進去了create-react-app。 今天早上就關於用命令: npm install -g serve 安裝了serve的包之後,用指令進行修改命令,就發現瞭如下的報錯: 看樣子那個serve的包已經安裝上去了,但是就是出現上面的報錯,在網上