2011-01-30 33 views

Trả lời

37
Random rand = new Random(); 
int toSkip = rand.Next(0, context.Quotes.Count); 

context.Quotes.Skip(toSkip).Take(1).First(); 
+0

gì dòng này làm: int toSkip = rand.Next (0, context.Quotes.Count); ? – frenchie

+0

Nó tạo ra một số là chỉ số của báo giá ngẫu nhiên. Nó nói, chọn một số ngẫu nhiên giữa 0 và số Quotes trong DataContext. –

+0

ah ok! đó là một phương pháp mở rộng trên các loại ngẫu nhiên. – frenchie

1

Dưới đây là một cách để đạt được những gì bạn muốn làm:

var quotes = from q in dataContext.Quotes select q; 
int count = quotes.Count(); 
int index = new Random().Next(count); 
var randomQuote = quotes.Skip(index).FirstOrDefault(); 
5

Nếu bạn đang làm LINQ-to-Đối tượng và không cần điều này để làm việc trên SQL, bạn có thể sử dụng ElementAt() thay vì tiết hơn Skip(toSkip).Take(1).First():

var rndGen = new Random(); // do this only once in your app/class/IoC container 
int random = rndGen.Next(0, context.Quotes.Count); 
context.Quotes.ElementAt(random); 
3

tôi đã làm nó một cái gì đó như thế này:

list.ElementAt(rand.Next(list.Count()); 

Tôi bị kẹt một loạt các hoạt động ngẫu nhiên, bao gồm chọn và trộn, làm phương thức mở rộng. Điều này làm cho chúng có sẵn giống như tất cả các phương pháp mở rộng bộ sưu tập khác.

Bạn có thể xem mã của mình trong bài viết Extending LINQ with Random Operations.

0

1 Đầu tiên tạo ra một lớp với tài sản Rend

public class tbl_EmpJobDetailsEntity 
{ 
    public int JpId { get; set; } 
    public int rend 
    { 
    get 
     { 
     Random rnd = new Random(); 
     return rnd.Next(1, 100); 
     } 
    } 
} 

2 LINQ truy vấn

var rendomise = (from v in db.tbl_EmpJobDetails 
select new tbl_EmpJobDetailsEntity 
{ 
    JpId=v.JpId 
}).OrderBy(o=>o.rend); 
Các vấn đề liên quan