C# 3.0, Linq, Linq To Sql
版权声明:本Blog内的所有文章如非特别注明,版权均归作者个人所有,任何外部引用或摘抄请注明原文地址,未经作者授权不得用于任何以营利目的的行为,谢谢合作! Name: Tom Song MSN: sguoan@hotmail.com
需要说明的是,orderby操作,不支持按type排序,也不支持匿名类。比如 var q = db.Customers.OrderBy(c => c).ToList();和var q = db.Customers.OrderBy(c => new {c.City,c.ContactName}).ToList();
会被抛出异常。但是,既然提了,大家在这个问题就不会犯错误,常见的错误是前面的操作有匿名类,再跟orderby时,比较的是类别。比如
var q = db.Customers.Select(c => new { c.City, c.Address }).OrderBy(c => c).ToList();
如果你想使用OrderBy(c => c),其前提条件是,前面步骤中,所产生的对象的类别必须为C#语言的基本类型。比如var q = db.Customers.Select(c=>c.City).OrderBy(c => c).ToList();city为string类型。还有一点需要说明的时,linq和dlinq在orderby操作中,稍微有一点区别。linq支持按type排序,但是,需要你自己去实现IComparable接口。比如语句:var q = db.Customers.ToList().OrderBy(c => c).ToList();第一个ToList()会把数据库中所有数据取出,放到内存中,以后所有的操作全部是对内存操作。后面的所有操作均为linq操作,不是dlinq。(这一点,我前面的文章中讲过)如果,你想用按客户进行排序,你必须在Customer类中,实现IComparable接口
Orderby操作,会自动调用该接口的方法,实现按类别排序。如果,你的映射文件中没有实现该接口,系统会抛出异常。你也可以使用generic,如下, public partial class Customers : System.Data.Linq.INotifyPropertyChanging, System.ComponentModel.INotifyPropertyChanged,IComparable<Customers>
好处就是你无须把object强制转化为customer类。我们再来定义个,先按订单号排序,相同订单按产品号排序的。 public partial class OrderDetails : System.Data.Linq.INotifyPropertyChanging, System.ComponentModel.INotifyPropertyChanged,IComparable<OrderDetails>
好了,更多的功能,等待大家自己去实现。下次讲Groupby操作。
昵称: [登录] [注册]
主页:
邮箱:(仅博主可见)
验证码: 看不清,换一个
评论内容:
登录 注册
[使用Ctrl+Enter键快速提交评论]
Powered by: 博客园 Copyright © Tom Song