从Linq到Sql的随机行,没有重复

时间:2014-08-18 06:24:49

标签: c# asp.net .net linq linq-to-sql

使用具有唯一数据/无重复记录的Linq to SQL来检索随机行的最佳(且最快)方法是什么?哦,我愿意在1个声明中做到这一点,它有可能吗? 我发现了这个relevant question,但我不认为这种方法会产生独特的记录。

到目前为止我已尝试过这个:

//first approach

AirAsiaDataContext LinqDataCtx = new AirAsiaDataContext();
var tes = (from u in LinqDataCtx.users.AsEnumerable()
           orderby Guid.NewGuid()
           select u).Take(5);  

//second approach

var usr = from u in LinqDataCtx.users
          select u;

 int count = usr.Count(); // 1st round-trip
 int index = new Random().Next(count);

 List<user> tes2 = new List<user>();
 for (int i = 0; i < 5; i++)
 {
      tes2.Add(usr.Skip(index).FirstOrDefault()); // 2nd round-trip    
 }

正如您在上面所看到的,我已经尝试了2个解决方案,但它可以工作,但是上面的代码没有产生唯一记录,有可能重复。

1 个答案:

答案 0 :(得分:-1)

db.TableName.OrderBy(x=>Guid.NewGuid()).FirstOrDefault();

如果您想获取唯一数据/没有重复记录, 你最好使用另一个列表存储你已经删除的行。