传统使用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(); |
linq to sql随机数问题
最新推荐文章于 2022-11-25 10:17:27 发布