程式碼乾貨——C#Linq表示式的高階寫法
Linq全稱為“Language Integrated Query”,譯為“語言整合查詢”。主要在前臺對資料來源的封裝與處理。接下來就專案的實際需求場景,介紹下面的Linq用法:
匹配篩選(where)子句
屬性篩選
介面上有一個checkListComboxEdit控制元件,其資料項都存在Items陣列中,選中項存在SelectdedItems如果我們要選擇其中的選中項,寫程式碼的思路必然是foreach這個陣列,然後重新new一個新的List,然後將其中的item重新新增到這個新的List,下面給出程式碼示例:
List
list = new List
;foreach (
var
item in this。checkedListBoxControl_ProdIndex。SelectedItems)
{
list。Add(item);
}
使用where篩選將會變得更加簡單,不信你看:
var selectItems = this。checkedListBoxControl_ProdIndex。Items
。Where(x => x。CheckState == CheckState。Checked)。ToList;
點選載入圖片
checkList遍歷獲取
2。多list列表屬性匹配篩選
假設專案中得到了一個型別為TreeListNodeDescriptor的list列表,如果要根據其共有屬性匹配成另外一個list列表,作用是獲取井資訊,型別為WellInfoDecriptor,其中一個方案就是遍歷原有的TreeListNodeDescriptor的list,然後匹配裡面的WellName屬性,然後將WellInfo獲取出來,仔細想想程式碼其實會寫的很冗長。而透過Where子句就會變得很簡單,其中用到Any檢查是否滿足該條件,相當於遍歷中的if語句。直接上程式碼:
var wellGeoList = DataCenter。Instance。WellGeoUnits;
其中WellGeoUnits為TreeListNodeDescriptor型別的列表,DataCenter為資料中心,主要是呼叫後端資料介面,將井節點傳遞到前臺。WellGeoUnit屬性進行了封裝,設定為只讀屬性:
public List
WellGeoUnits
{
get { return wellGeoUnits; }
}
接著,需要透過井Id獲取到井資訊,由於提前獲取到了所有的井資訊,儲存在List
中,命名為AllWells,於是:
var allWells = DataCenter。Instance。AllWells
。Where(x => wellGeoList。Any(y => y。NodeName == x。WellName))。ToList;
點選載入圖片
多表連線
AllWells封裝屬性為:
///
/// 所有井///
public List
AllWells { get { return _allWells; } }
點選載入圖片
屬性封裝
透過Any方法,將兩個列表的共有屬性WellName進行判斷,獲取出所有井中包含該井名的井資訊,這樣做的前提保障是井名不會重複,自己做的時候需要有一個主鍵屬性,透過這樣的方式,將所有井的資訊獲取出來,儲存在allWells的list列表中。
今天就先分享Linq表示式的where子句的用法,其中還介紹了多表連線中,使用Any屬性判斷屬性是否相同,合理使用Linq表示式,會讓程式碼的效率事半功倍,程式碼可讀性增加。明天分享投影以及排序、去重方法。請大家敬請關注。如果覺得這篇文章對您有幫助,請幫我點個贊或者評論下,您的鼓勵是我更新下去的動力。關注我瞭解更多程式碼的寫法。
相關文章
- 2021-09-27熱血傳奇:兩點分析戰士衣服沒有攻擊屬性
- 2021-08-07曾經價值千萬的神器,如今丟了都沒人撿?DNF的裝備衰亡史
- 2021-07-27夢幻西遊手遊:忽視不如神佑?這或許是神威組物理系的世紀難題!
- 2021-05-12DNF:1分鐘完成2個小遊戲!想出這招的勇士,真的是人才
- 2021-05-05迷你世界:迷你幣不夠不要緊,教你獲得全套裝扮,解鎖限定坐騎