LINQ中实现随机查询数据库中记录

传统使用sql命令行方式





SELECT TOP 1 * FROM Customers ORDER BY NEWID()
--随机取出一条记录,想取多条,则top n




当随着LINQ时代的来代,这一切就有点不太好用了

按照传统的思路,我们可以把LINQ查询式写为



var results=(from c in db.Customers orderby  NEWID()
select c).Take(10);
//具体数据条数由take来进行指定


问题出现了,在C#当中根本就没有提供NEWID()这个方法..

几经周折,终于发现了一个比较可行的方案,就是为其添加这个NEWID()方法



下面是实现方案

首先我们需要在系统自由生成的o/p mapping代码中添加这个方法

如果是用户自己编写的(或是工具生成的)o/p mapping代码也是同理.

这里我就说下我自己的.系统生成的LINQ To Sql类会产生三个文件.Northwind.cs,Northwind.dbml.layout,Northwind.designer.cs

我们要做的就是在Northwind.designer.cs中去添加我们需要的方法NEWID()

这个方法的功能当然就是和数据库当中的NEWID()是功能一致的.

具体的方法法代码如下:


[System.Data.Linq.Mapping.DatabaseAttribute(Name="Northwind")]
public partial class NorthwindDataContext : System.Data.Linq.DataContext
{
       
    private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();
        //在自动生成的mapping code中添加
        [Function(Name = "NEWID", IsComposable = true)]
        public Guid NEWID()
        {
            return ((Guid)(this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod()))).ReturnValue));
        }
//后面的生成代码略..


重新生成,编写好这个,我们的访问实现就变的很容易了哈

其使用方式和传统访问原理一致



            db = new NorthwindDataContext();
            var result = (from c in db.Customers orderby db.NEWID() select c).Take(10);

            foreach (var item in result)
                Console.WriteLine(item.CompanyName);

            Console.ReadLine();


好了忙活了老半天,特贴出来希望朋友们少走弯路^_^


原文出处:http://www.cnblogs.com/symbol441/archive/2008/08/01/1258033.html

 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [Linq] 的这些文章也感兴趣:

扩展LINQ to SQL以支持批量删除  LINQ to SQL 辅助工具
深入浅出学Linq:通过Linq to SQL看Linq  使用linq to xml 快速创建Rss 之二:Syndication篇
深入浅出学Linq:Linq to SQL感性认识篇  Linq实现动态查询与模糊查询
LINQ 从数据库读数据生成 XML  Linq to Sql--用存储过程更新数据库
LINQ体验(12)——LINQ to SQL语句之对象标识和对象加载  LINQ数据源ASP.NET项目入门
LINQ Framework Design Guidelines  LINQ查询关键字使用之from,group,select,into,where(C#)
LINQ to SQL公共基类  LINQ综合查询语言开发首先要了解
使用 Linq 在不同类型之间转换  LINQ体验(11)——LINQ to SQL语句之Null语义和String/DateTime方法
LINQ to XSD is Back  Jimmy Nilsson谈LINQ to SQL
LINQ体验(4)——LINQ简介和LINQ语句之Where  打造自己的LINQ Provider(中):IQueryable和IQueryProvider