Linq全稱為“Language Integrated Query”,譯為“語言整合查詢”。主要在前臺對資料來源的封裝與處理。接下來就專案的實際需求場景,介紹下面的Linq用法:
匹配篩選(where)子句屬性篩選介面上有一個checkListComboxEdit控制元件,其資料項都存在Items陣列中,選中項存在SelectdedItems如果我們要選擇其中的選中項,寫程式碼的思路必然是foreach這個陣列,然後重新new一個新的List,然後將其中的item重新新增到這個新的List,下面給出程式碼示例:
List<object> list = new List<object>();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<TreeListNodeDescriptor> WellGeoUnits{ get { return wellGeoUnits; }}
接著,需要透過井Id獲取到井資訊,由於提前獲取到了所有的井資訊,儲存在List<WellInfoDecriptor>中,命名為AllWells,於是:
var allWells = DataCenter.Instance.AllWells.Where(x => wellGeoList.Any(y => y.NodeName == x.WellName)).ToList();
多表連線
AllWells封裝屬性為:
/// <summary>/// 所有井/// </summary>public List<WellInfoDescriptor> AllWells { get { return _allWells; } }
屬性封裝
透過Any()方法,將兩個列表的共有屬性WellName進行判斷,獲取出所有井中包含該井名的井資訊,這樣做的前提保障是井名不會重複,自己做的時候需要有一個主鍵屬性,透過這樣的方式,將所有井的資訊獲取出來,儲存在allWells的list列表中。