程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C# 3.0入門系列(六)-之OrderBy操作(3)

C# 3.0入門系列(六)-之OrderBy操作(3)

編輯:關於C語言

還有一點需要說明的時,linq和dlinq在orderby操作中,稍微有一點區別。linq支持按type排序,但是,需要你自己去實現IComparable接口。

比如語句:var q = db.Customers.ToList().OrderBy(c => c).ToList();

第一個ToList()會把數據庫中所有數據取出,放到內存中,以後所有的操作全部是對內存操作。後面的所有操作均為linq操作,不是dlinq。(這一點,我前面的文章中講過)如果,你想用按客戶進行排序,你必須在Customer類中,實現IComparable接口

其Customer類,必須從IComparable繼承,代碼如下,

public partial class Customers : System.Data.Linq.INotifyPropertyChanging, System.ComponentModel.INotifyPropertyChanged,IComparable

Icomparable接口的具體實現如下:

#region IComparable Members
public int CompareTo(object obj)
{
return this._CustomerID.CompareTo(((Customers)obj).CustomerID);
//throw new Exception("The method or Operation is not implemented.");
}
#endregion

Orderby操作,會自動調用該接口的方法,實現按類別排序。如果,你的映射文件中沒有實現該接口,系統會拋出異常。

你也可以使用generic,如下,

public partial class Customers : System.Data.Linq.INotifyPropertyChanging, System.ComponentModel.INotifyPropertyChanged,IComparable<Customers>

#region IComparable<Customers> Members
public int CompareTo(Customers other)
{
return this.CustomerID.CompareTo(other.CustomerID);
//throw new Exception("The method or Operation is not implemented.");
}
#endregion

好處就是你無須把object強制轉化為customer類。

我們再來定義個,先按訂單號排序,相同訂單按產品號排序的。

public partial class OrderDetails : System.Data.Linq.INotifyPropertyChanging, System.ComponentModel.INotifyPropertyChanged,IComparable<OrderDetails>

#region IComparable<OrderDetails> Members
public int CompareTo(OrderDetails other)
{
int k = this._OrderID - other.OrderID;
if (k == 0)
{
k = this._ProductID - other.ProductID;
}
return k;
//throw new Exception("The method or Operation is not implemented.");
}

好了,更多的功能,等待大家自己去實現。下次講Groupby操作。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved