Trong cú pháp của SQL, LinQ đều có cách để làm việc này
I. SQL query lấy bản ghi ngẫu nhiên
Cấu trúc
Trong đó NEWID() quy định 1 trình tự sắp xếp mà các bản ghi được sắp xếp ngẫu nhiên, đây chính là cơ sở để lấy các bản ghi ngẫu nhiên.
SELECT TOP 5 [IDpost]
FROM [dbo].[tbPost]
ORDER BY NEWID() -- Trình tự sắp xếp ngẫu nhiên
Trong đó NEWID() quy định 1 trình tự sắp xếp mà các bản ghi được sắp xếp ngẫu nhiên, đây chính là cơ sở để lấy các bản ghi ngẫu nhiên.
II. Lấy bản ghi ngẫu nhiên bằng code LINQ
Dùng phương thức SKIP() của IEnumerable để nhảy qua n bản ghi, với n là một số ngẫu nhiên. Thực chất cách này không phải là lấy ngẫu nhiên một số bản ghi mà nếu có thì cũng chỉ hiệu quả với bài toán lấy ngẫu nhiên 1 bản ghi duy nhất.
Cấu trúc của cách làm này như sau:
Theo code này thì bạn sẽ lấy được 5 bản ghi liền nhau ở vị trí ngẫu nhiên > sẽ có lúc nhận được không đủ 5 bản ghi. Không đúng với bài toán lắm.
Vậy giải pháp ở đây là chạy câu lệnh SQL chửa NEWID() bằng LINQ
var p = from post in db.tbPosts
select new { post.IDpost, post.title }; // Chọn dữ liệu từ LinQ
int count = p.Count();
var random = new System.Random(); // Khởi tạo biến random
var postRD = p.Skip(random.Next(count)).Take(5); // Tiến hành random và chọn 5 record đầu tiên
dataSet1BindingSource.DataSource = postRD; // Điền dữ liệu vào datagridview
Theo code này thì bạn sẽ lấy được 5 bản ghi liền nhau ở vị trí ngẫu nhiên > sẽ có lúc nhận được không đủ 5 bản ghi. Không đúng với bài toán lắm.
Vậy giải pháp ở đây là chạy câu lệnh SQL chửa NEWID() bằng LINQ
var postRD = db.ExecuteQuery<tbPost>("SELECT * FROM tbPost ORDER BY NEWID()").Take(5);
dataSet1BindingSource.DataSource = postRD; // Thiết lập dữ liệu cho binddingridview
0 nhận xét:
Đăng nhận xét