zoukankan      html  css  js  c++  java
  • 关于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();

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

  • 相关阅读:
    entity framework 查看自动生成的sql
    如何从只会 C++ 语法的水平到达完成项目编写软件的水平?
    C/C++程序员必须熟练应用的开源项目
    VS2013创建Windows服务
    VS2013中使用Git建立源代码管理
    PowerDesigner导出表到word
    SQLSERVER的逆向工程,将数据库导入到PowerDesigner中
    Asp.Net MVC+EF+三层架构的完整搭建过程
    QT开发(一)Vs2013集成 QT5.3.1
    VS2013 好用的插件
  • 原文地址:https://www.cnblogs.com/symbol441/p/1258033.html
Copyright © 2011-2022 走看看