Trong SQL Server, để lấy về một tập kết quả ngẫu nhiên, bạn có thể viết:
SELECT TOP 5 * FROM myTable ORDER BY NEWID()
Trong LINQ, nếu muốn lấy về một tập kết quả ngẫu nhiên kiểu như trên, bạn cần tạo một hàm ngẫu nhiên, sau đó thêm nó vào LINQ designer, và dùng hàm đã tạo để sắp xếp. Các bước cụ thể như sau:
Tạo một SQL Server Project:
Thêm vào một user-defined function có tên RandomInt, đây là một hàm CLR chạy trong CSDL:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
public partial class UserDefinedFunctions
{
private readonly static Random r = new Random();
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlInt32 RandomInt()
{
return r.Next();
}
};
Sau đó, bạn bấm nút phải vào SQL Server Project vừa tạo và chọn Deploy:
và kéo hàm này từ cửa sổ Server Explorer vào LINQ Designer:
Sau khi kéo thả, bạn sẽ thấy hàm này xuất hiện tren MethodPane của cửa sổ LINQ Designer:
Và có thể dùng nó trong câu lệnh lấy dữ liệu ngẫu nhiên như sau:
DataClasses1DataContext _context = new DataClasses1DataContext();
var s = (from c in _context.mytable orderby _context.RandomInt() select c).Take(5);
Khi đó, s sẽ chứa 5 dòng ngẫu nhiên từ CSDL (theo thứ tự ngẫu nhiên).




Leave a Reply