linq to sql随机数问题

本文详细介绍了如何在C# LINQ时代,通过在系统自动生成的LINQToSql类中添加NEWID()方法,实现随机获取数据库记录的功能。包括添加方法的具体步骤和使用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

传统使用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();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值