Linq 的基本用法: Sort , OrderBy, Skip,Take,Where,Compare,Join,Distinct ,InsertRange[轉]


Select用法 var selectedItems = from item in items where item.ParentID == parentID orderby item.SortIndex descending ,item.Name ascending select item;

0.1 where : var list=collection.Where(t => (txtCustomerName.Text.Trim().Length == 0 || t.ClientName.ToUpper().IndexOf(txtCustomerName.Text.Trim().ToUpper()) >= 0)); // 根據條件查詢,如果 txtCustomerName中有值 則匹配collection中的ClientName 是否包含這個txtCustomerName 的值

10.1 LInq 遞歸實現

定義 function private BuildExpression(IEnumberable<string> enumberableList){...}

return factory =>
{ //遞歸實現的function
BuildExpression(factory);
};

一、 LinQ To Object 主要使用在 一些 array ,list,collection ,IEnumerable 等數組上面,

var list=new List<T>(); var list2=new List<T>();

1.01 list.Select(t=>t.CreateDate).SeperateToString(","); //select createdate 字段集合並組成string 返回

1.02 list.Select(t=>new DataEntity{Name=t.Name,Value=t.Value}); //select TypeOf(list) 類型中的某些字段到新的 DataEntity 實例中

1.11 list.OrderBy(entity=>entity.CreateDate); //entity 表示 T的一個實例,按照 createdate 順序排列,反之 則使用 listOrderByDescing

1.12 selectedItems.OrderBy(entity => entity.SortIndex).ThenBy(entity => entity.name); // 多個字段排序

1.2 list.Sort( (x, y) => StringComparer.CurrentCultureIgnoreCase.Compare(x.CreateDate,y.CreateDate)); //x,y 表示 T的一個實例, x 在y前面表示 順序排列,如果變為Compare(y.CreateDate,x.CreateDate)表示倒序排列

1.3 list.Skip(count) //count 表示 跳過count 個數據 處理分頁可以使用 list.Skip((page-1)*pageSize).Take(pageSize);

1.4 list.Take(count) //count 表示 選取count 個數據

實例1(按照createdate 排序,並選取前 n個T 類型的集合):

list.OrderBy(entity==>entity.CreateDate).Take(n).ToList<T>();

1.5 list.Distinct(); //刪除重復項,list 必須為一維數據組

1.6 list.Count(); //list 數字的記錄條數

1.6.1 list.Count(item=>item.Name=='test') //查詢list中 name 為 test 的記錄條數

1.7 list.Sum(); //合計,list 必須為一維數組

1.7.1 list.Sum(item=>item.Quantity); //合計,合計list中的quantity 字段

1.8 list.Min(); //list 中的最小值或記錄

1.8.1 list.Select(item=>item.Quantity).Min() //或者list中 數量最少的記錄

1.8.2 list.Min(item=>item.Quantity) //或者list中 數量最少的記錄

1.8.3 變相實現list min 對 兩個屬性進行比較

list.Orderby(t=>t.Quantity).thenBy(t=>t.Price).FirstOrDefault();

1.8.10 list.InsertRange(0,list2) //在list的指定位置插入list 2

1.9 list.ForEach(item=>item.Quantity+=1) //每個item的quantity 加1

2.0 list.Concat (list2) // 兩個同類型的list ,list2 組合起來,並且不去除相同記錄,順序為 list2 追加到list 后面

2.1 list.Union(list2) //兩個同類型的list ,list2 組合, 去除相同記錄,並追加到list 后面

list.Union(list2,, new LambdaComparer<string>((a, b) => a == b))

2.2 list.Intersect (list2) //取相交項,取list1,list2 相同項,並且后面可以加compare 條件

2.2 list.Except(list2) //從list中選擇 除了 list2中含有的其他所有數據

2.3 list.Aggregate((x,y)=>xyexpression) //聚合函數,將 list中數據 分別進行 聚合

比如 : var list = new List<string>(){"1","12","13","14","15","19","111","121","","23"};
var strReturn = list.Aggregate("return ", (x, y) => (string.IsNullOrEmpty(y) ? x : x + y + " && "));
strReturn = strReturn.Substring(0, strReturn.Length - 3) + ";";

結果為: return 1 && 12 && 13 && 14 && 15 && 19 && 111 && 121 && 23 ;

例子的功能也可以簡化為 list.Join("&&")

2.4 list.Join(stringSeperator) 將list中item 使用 stringSeperator 連接起來,如上面的例子

一. 組合應用

以下應用實現了 多個node 和 connector 之間的關聯. node 可能沒有與connector 相連接, 但是connector 必須與node 連接

實現 取出所有connector , 並取出有連接線的node 和 沒有連接線的node

var listFlowActions = new List<FlowAction>(); 
var connectors = flowActions.Where(i => i.ActionType == MongoConstants.FlowActions.Connector
&& IsFlowActionExists(i.SourceFlowActionId)
&& IsFlowActionExists(i.TargetFlowActionId)).OrderBy(connection => connection.Index);
var allNodes = flowActions.Where(i => i.ActionType != MongoConstants.FlowActions.Connector);

var connectedNodes = new List<FlowAction>();
connectors.Each(t => connectedNodes.Add(allNodes.Where(i => i.Id == t.SourceFlowActionId).FirstOrDefault()))
.Each(t=>connectedNodes.Add(allNodes.Where(i=>i.Id==t.TargetFlowActionId).FirstOrDefault()));

var notConnectedNodes = connectedNodes.Except(connectedNodes) .Each((i, index) => i.X = index * 100)
.Each(i => i.Y = 50);;

Linq 分頁

dbconn.Records.OrderBy(p=>p.bid_id).Skip(skip).Take(take).

skip= pageSize*(pageIndex-1),take=pageSize

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM