日期:2014-05-20  浏览次数:20916 次

ToList,count 一些请教
LIQN TO SQL的模型类搭建好后,子级关系也有了。
当查询父表的时候,

ToList-----
比如一个简单的 查询订单集合语句

sqlHelpler.EC.Orders.ToList();

他得到的结果是 父表的全部数据,子表的全部数据。而某些地方的查询只需要 得到主要的某几个字段而已,不需要得到子表中那么庞大的数据,这种情况我怎么来查?

比如 我要的结果只查 sleect id from orders 就可以, 而不用select *from orders 或者在join到子表去了。



count ---
 
我要得到 select count(id) from orders 这样一句话的执行代码,用LINQ是如何写的?

sqlHelpler.EC.Orders.ToList().Count() 和sqlHelpler.EC.Orders.ToList().Count
执行的是先查全部数据,在查集合数量跟 直接一个count sql语句的效率差了千万倍。




才学linq也不久,网上也查不到这些疑问,顾来请教



------解决方案--------------------
呵呵,说到这,我都弄不清你现在是要实现什么目的了。是要返回指定ID的Order?还是返回所有Order的ID总数?

目前Entity模型下,LINQ to SQL同样是生成SQL查询语句来进行的,这个可以设置DataContext.Log属性来观察生成的SQL查询语句,所以这个开销,和你直接用ADO.NET对象的开销相比,也不见得有劣势。而且语义表达上更直观。

你的SQL查询:select count(Id) from orders与LINQ的 Orders.Count(o=>o.Id)可以视作等价的。

我最近也在学习LINQ to SQL。 我一直设置DataContext.Log = Console.Out; 就是看它生成什么样的SQL查询语句,再来加深理解。

希望以上对你有所帮助。
------解决方案--------------------
C# code
List<int> list = db.Orders.Select(o => o.OrderID).ToList<int>();

------解决方案--------------------
探讨

LIQN TO SQL ?

LIQN TO SQL 中不能显示指定类型

o=>new Orders{Id=o.Id}
=》
o=>new {Id=o.Id}

然后将结果ConvertTo or Cast

------解决方案--------------------
探讨
1,上面的LIST只查了一个ID吧,UI层你给其它字段,没值吧
2.用匿名类 用完就仍。 (但是匿名类就不是.dbml 文件映射的表模型了,要对其查询什么的。要编写2.0的代码了, 我在学linq阶段,所有没有希望用匿名类来解决)