2012-01-24 3 views
0

У меня есть следующий запрос LINQ -Linq запрос не будет препятствовать мне заказ на сегодняшний день

var data = (from req in db.tblRequirements 
     where req.guidRequirementId == guidRequirementId 
      && (!db.ViewMIPRAlls.Any(x=>x.guidRequirementId == req.guidRequirementId)) 
     select new 
     { 
      guidRequirementId = req.guidRequirementId, 
      strStatus = req.tblCodesRequirementStatus.strDescription, 
      strNumber = req.ViewNumber.strAwardNumber, 
      strOffice = req.tblOrganization.strAcronym, 
      strCustomerOffice = req.tblOrganizationCustomer.strAcronym, 
      strDescription = req.strDescription, 
      strNotes = req.strNotes, 
      strStatusId = req.strStatusId, 
      strCompany = req.strCompany, 
      strUpdatedBy = Person.GetPersonNameFromUserID(req.guidUserId), 
      dtmUpdated = Requirement.UpdateTime(req.guidRequirementId), 
      dtmEsitmatedEnd = (req.tblDates.Select(x=>x.dtmEnd) != null 
       ? req.tblDates.Select(x=>x.dtmEnd.ToShortDateString()).ToString() 
       : "" 
      ) 
     }).OrderBy(x=>x.dtmEnd); 

и я не могу заказать его по дате. Это результаты запроса в следующей ошибке:

Could not format node 'ClientQuery' for execution as SQL.

+2

Какой провайдер LINQ? LINQ to SQL, LINQ to Entities? Что-то другое? – Yuck

+0

LINQ to SQL извините – EvanGWatkins

ответ

4

Либо OrderBy Прежде чем выбрать, или OrderBy что-то вы создали в выбранном

+0

Когда я делаю заказ до выбора нового, я получаю следующую ошибку: Невозможно заказать по типу 'System.Collections.Generic.IEnumerable'1 [System.DateTime]'. – EvanGWatkins

+0

hmmm, попробуйте сделать .ToList(). OrderBy (x => x.dtmEnd) .select (... –

+0

(это означает, что ваше приложение будет делать заказ вместо базы данных) –

3

Предложение OrderBy должно прийти перед select new, если вы пытаетесь сортировать по полям в SQL.

Ваше заявление LINQ может быть преобразована в:

var data = 
    from req in db.tblRequirements 
    from dates in req.tblDates 
    where req.guidRequirementId == guidRequirementId 
     && (!db.ViewMIPRAlls.Any(x=>x.guidRequirementId == req.guidRequirementId)) 
    order by dates.dtmEnd 
    select new 
    { 
     guidRequirementId = req.guidRequirementId, 
     strStatus = req.tblCodesRequirementStatus.strDescription, 
     strNumber = req.ViewNumber.strAwardNumber, 
     strOffice = req.tblOrganization.strAcronym, 
     strCustomerOffice = req.tblOrganizationCustomer.strAcronym, 
     strDescription = req.strDescription, 
     strNotes = req.strNotes, 
     strStatusId = req.strStatusId, 
     strCompany = req.strCompany, 
     strUpdatedBy = Person.GetPersonNameFromUserID(req.guidUserId), 
     dtmUpdated = Requirement.UpdateTime(req.guidRequirementId), 
     dtmEsitmatedEnd = (req.tblDates.Select(x=>x.dtmEnd) != null 
      ? req.tblDates.Select(x=>x.dtmEnd.ToShortDateString()).ToString() 
      : "" 
     ) 
    } 

Пожалуйста, обратите внимание, что в зависимости от типа отношений между tblRequirements и tblDates, это может дать больше записей, чем ваш первоначальный выбор. Чтобы преодолеть это, вам нужно придумать способ, чтобы агрегировать записи в tblDates, соответствующие tblRequirements записи (возможно, просто взять max(tblDates.dtmEnd)?)

+0

Когда я поместил заказ до выбора нового, я получаю следующую ошибку: Не удается упорядочить по типу 'System.Collections.Generic.IEnumerable'1 [System.DateTime]'. – EvanGWatkins

+0

@EvanGWatkins Это потому, что вы выбираете из 'tblRequirements', но заказываете поле, которое находится в' tblDates'. Вам нужно также получить 'tblDates' в разделе' from' (добавив его вместе с другой таблицей). – GolfWolf

0

Try:

where req.guidRequirementId == guidRequirementId 
     && (!db.ViewMIPRAlls.Any(x=>x.guidRequirementId == req.guidRequirementId)) 
order by req.dtmEnd  
select new 
Смежные вопросы