惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Threatpost
P
Privacy & Cybersecurity Law Blog
A
Arctic Wolf
S
Securelist
T
The Exploit Database - CXSecurity.com
T
Tor Project blog
K
Kaspersky official blog
Last Week in AI
Last Week in AI
NISL@THU
NISL@THU
C
Cisco Blogs
T
Tenable Blog
S
Schneier on Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Security Archives - TechRepublic
Security Archives - TechRepublic
Cisco Talos Blog
Cisco Talos Blog
GbyAI
GbyAI
WordPress大学
WordPress大学
Security Latest
Security Latest
G
GRAHAM CLULEY
人人都是产品经理
人人都是产品经理
月光博客
月光博客
爱范儿
爱范儿
L
LangChain Blog
Google Online Security Blog
Google Online Security Blog
N
Netflix TechBlog - Medium
N
News | PayPal Newsroom
L
Lohrmann on Cybersecurity
Cyberwarzone
Cyberwarzone
Vercel News
Vercel News
The Cloudflare Blog
C
CERT Recently Published Vulnerability Notes
腾讯CDC
Scott Helme
Scott Helme
I
InfoQ
Jina AI
Jina AI
Hacker News: Ask HN
Hacker News: Ask HN
C
Cyber Attacks, Cyber Crime and Cyber Security
U
Unit 42
T
The Blog of Author Tim Ferriss
H
Heimdal Security Blog
D
Docker
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
酷 壳 – CoolShell
酷 壳 – CoolShell
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
博客园 - Franky
F
Full Disclosure
大猫的无限游戏
大猫的无限游戏
博客园 - 【当耐特】
The GitHub Blog
The GitHub Blog
H
Help Net Security

博客园 - 西门潇洒

MSSQL批量写入数据方案 关于SQL连接 加条件查询的LINQ表达式写法 .NET新特性--扩展方法 Array中数据强制数据类型转换 the Project type is not supported by installation 项目类型不能正确加载 ASP.NET三层架构中数据绑定的问题 ASP.NET 2.0中XML数据的处理 小牛生产小牛的问题解决集粹 <转>自毁前程的七种行为 <转>在 ASP.NET 中执行 URL 重写 正则式中的实用命名组替换 去除socket编程当中接收到的多余符\0 - 西门潇洒 - 博客园 将一段符合XML格式规范字符串插入已有XML文档当中 <转>如何C#中实现在TreeView查找某一节点 javascript正则表达式中使用变量关键字 <转>JavaScript 参考教程之对象化编程 <转>JavaScript 参考教程之JavaScript 简介 <转>JavaScript 参考教程之事件处理 <转>JavaScript 参考教程资料之文档对象
关于LINQ中实现随机查询数据库中记录
西门潇洒 · 2008-08-01 · via 博客园 - 西门潇洒

传统使用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();

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