首頁>技術>

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列表中。

7
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 「python課程,精心總結」list列表修改和sort排序