2016-02-06 3 views
1

Я написал код, который собирается случайно вернуть строку данныхрандомизация Выбор не работает

Я хочу 5 строки выбранной случайным образом, но не работает, и возвращаемое значение

Все было верно, но часть что связано с случайным возвращением просто не работают

public List<tblInvoice> Admin_GetRowsSendProduct(string StartDate, string EndDate, int status = -1, bool Randomize = false) 
{ 
    LtSProductDataContext db = new LtSProductDataContext(BLLBase.BLLBase.ConnectionString); 
    IQueryable<tblInvoice> xxx = db.tblInvoices.Where(p => p.status == true); 
    DateTime _StartDate = DateTime.MinValue; 
    DateTime _EndDate = DateTime.MinValue; 
    if (xConvertor.ToString(StartDate) == "" || xConvertor.ToString(EndDate) == "") 
    { 
     if (string.IsNullOrEmpty(StartDate) == false) 
      _StartDate = BLLBase.xDateTime.DateXorshid2DateMiladi(StartDate.ToString()); 
     if (string.IsNullOrEmpty(EndDate) == false) 
     { 
      _EndDate = BLLBase.xDateTime.DateXorshid2DateMiladi(EndDate.ToString()); 
      if (_StartDate == _EndDate) { _EndDate = _StartDate.AddDays(1); } 
     } 
     xxx = xxx.Where(p => 
     (p.status == true) && 
         (_StartDate == DateTime.MinValue || p.Date >= _StartDate) && (_EndDate == DateTime.MinValue || p.Date <= _EndDate)); 
    } 
    else if (xConvertor.ToString(StartDate) != "" && xConvertor.ToString(EndDate) != "") 
    { 
     _StartDate = BLLBase.xDateTime.DateXorshid2DateMiladi(StartDate.ToString()); 
     _EndDate = BLLBase.xDateTime.DateXorshid2DateMiladi(EndDate.ToString()); 

     xxx = xxx.Where(p => p.Date <= _EndDate && p.Date >= _StartDate && p.status == true && p.SendStatus == status); 
    } 

    xxx = xxx.Where(p => (status == -1 || p.SendStatus == status) && p.status == true).OrderByDescending(p => p.Date); 



    if (Randomize) 
    { 
     Random rnd = new Random(); 
     xxx = xxx.OrderBy(x => rnd.Next()); 
     //xxx = xxx.OrderBy(o => Guid.NewGuid()); 
     xxx = xxx.Take(3); 
     return xxx.Where(p => (p.isPostalPayment == null || p.isPostalPayment == false)).ToList(); 
    } 
    else 
    { 
     return xxx.Where(p => (p.isPostalPayment == null || p.isPostalPayment == false)).ToList(); 
    } 
    //return xxx.Where(p => p.PaymentType != 4).ToList(); 
} 

не работает этот раздел:

xxx = xxx.OrderBy(x => rnd.Next()); 

или

xxx = xxx.OrderBy(o => Guid.NewGuid()); 

ответ

0
if (Randomize) 
{ 
    List<tblInvoice> _Result = db.tblInvoices.ToList(); 

    var _Temp = xxx.Where(p => (p.isPostalPayment == null || p.isPostalPayment == false)).ToList(); 
    _Result = _Temp.OrderBy(o => Guid.NewGuid()).Take(5).ToList(); 
    return _Result; 
} 
+0

Параметр 'db.tblInvoices.ToList()' не имеет смысла, вы сохраняете результат в '_Result', но тогда вы перезаписать его в' _Result = _Temp.OrderBy'. Все, что вы делаете, - это сделать базу данных прочитанной дополнительной 'select * from Invoices' из базы данных, с которой вы никогда ничего не делаете. Просто сделайте 'List _Result;' или переместите объявление в 'List _Result = _Temp.OrderBy' –

+0

Кроме того, это очень неэффективно, вы возвращаете все строки из базы данных в' _Temp', когда вы выполняете '.ToList () 'on' xxx', тогда вы сохраняете только 5 строк и помещаете их в '_Result'. Вы должны ожидать, что этот код будет медленным и использовать много оперативной памяти, если в таблице 'Invoices' имеется много строк. –

Смежные вопросы