技术开发 频道

LINQ 未满


【IT168技术文档】

  LINQ 这个东东,出来有一段时间了,最近稍微看看了,发现 .Net 3.0 和 LINQ 还是挺有意思的。

  我个人认为,DLINQ 的最初起因是 Sql Server 2005 支持用 .Net 写存储过程,但是用 .Net 写的存储过程却需要用字符串的方式写 SQL 语句,从而丧失了存储过程本身的语法、语义的编译时检测的好处,而 DLINQ 正好可以弥补这个缺陷,当然,这只是我的推测而已,而且不管起因是什么,对于使用者来说都没有什么关系,只要好用就可以了 :)

  首先,LINQ 对集合的处理能力很好,至少,我们可以用比较熟悉的 SQL 语法,对于集合进行一些复杂的操作,比如 Group By、Join 什么的,总是比自己写代码完成要更方便,更安全,而且可读性也不错。
1. using System; 2. using System.Query; 3. using System.Collections.Generic; 4. 5. class app { 6. static void Main() { 7. string[] names = { "Burke", "Connor", "Frank", 8. "Everett", "Albert", "George", 9. "Harris", "David" }; 10. 11. IEnumerable<string> expr = from s in names 12. where s.Length == 5 13. orderby s 14. select s.ToUpper(); 15. 16. foreach (string item in expr) 17. Console.WriteLine(item); 18. } 19. }
  上述代码输出:
BURKE DAVID FRANK
  DLINQ 对数据库的操作也算直观,而且也支持 ORM 方式,ORM 部分的 Object 的定义方式比较复杂,应该是为了对于 Update 提供完善的支持,从而只对修改过的字段进行 Update。不过在我看来,意义不大,一般而言,就算是一条记录全部 Updata 开销也不大,而且,可以使用继承的方式来拆分某些大字段(Text 之类),以使之不被 Update:
1. using org.hanzify.llf.Data; 2. 3. [DbTable("B")] 4. public class A : DbItem 5. { 6. // dbtype: varchar(20) 7. public string Name; 8. } 9. 10. public class B : A 11. { 12. // dbtype: Text 13. public string Content; 14. 15. public A GetA() 16. { 17. A a = new A(); 18. a.m_Id = m_Id; 19. a.Name = Name; 20. return a; 21. } 22. } 23. 24. public class Program 25. { 26. public static void Main() 27. { 28. DbItemList<B> bl = new DbItemList<B>(CK.K["Name"] = "test"); 29. B b = bl[0]; 30. b.Name = "test 1"; 31. b.GetA().Save(); 32. } 33. }
0
相关文章