程式碼乾貨——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;

程式碼乾貨——C#Linq表示式的高階寫法

點選載入圖片

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;

程式碼乾貨——C#Linq表示式的高階寫法

點選載入圖片

多表連線

AllWells封裝屬性為:

///

/// 所有井///

public List

AllWells { get { return _allWells; } }

程式碼乾貨——C#Linq表示式的高階寫法

點選載入圖片

屬性封裝

透過Any方法,將兩個列表的共有屬性WellName進行判斷,獲取出所有井中包含該井名的井資訊,這樣做的前提保障是井名不會重複,自己做的時候需要有一個主鍵屬性,透過這樣的方式,將所有井的資訊獲取出來,儲存在allWells的list列表中。

今天就先分享Linq表示式的where子句的用法,其中還介紹了多表連線中,使用Any屬性判斷屬性是否相同,合理使用Linq表示式,會讓程式碼的效率事半功倍,程式碼可讀性增加。明天分享投影以及排序、去重方法。請大家敬請關注。如果覺得這篇文章對您有幫助,請幫我點個贊或者評論下,您的鼓勵是我更新下去的動力。關注我瞭解更多程式碼的寫法。

相關文章