2012-01-24 30 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); 

,我無法按日期來訂購吧。此查詢結果中出現以下錯誤:如果您嘗試通過在SQL字段排序

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

+2

哪個LINQ提供程序? LINQ to SQL,LINQ to Entities?還有別的嗎? – Yuck

+0

LINQ to SQL抱歉 – EvanGWatkins

回答

4

無論是排序依據的選擇之前,或排序依據的東西,你已經創建在選擇

+0

當我通過選擇新的命令之前,我得到以下錯誤: 無法按類型'System.Collections.Generic.IEnumerable'1 [System.DateTime]'進行排序。 – EvanGWatkins

+0

嗯,嘗試做.ToList()。OrderBy(x => x.dtmEnd).select(... –

+0

(這意味着您的應用程序將執行排序,而不是數據庫) –

3

OrderBy條款應在來之前select new

你的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() 
      : "" 
     ) 
    } 

請注意,根據關係的tblRequirementstblDates之間的類型,這可能會產生超過您最初的選擇更多的記錄。 爲了克服這一點,你需要想辦法聚集在tblDates對應於tblRequirements記錄的記錄(也許只是採取max(tblDates.dtmEnd)?)

+0

當我把前面的命令放在select new之後,我得到以下錯誤:無法按類型'System.Collections.Generic.IEnumerable'1 [System.DateTime]'進行排序。 – EvanGWatkins

+0

@EvanGWatkins這是因爲您從'tblRequirements'中選擇,但是按'tblDates'中的字段排序。您還需要在'from'子句中獲得'tblDates'(通過將其與另一個表連接起來)。 – GolfWolf

0

嘗試:

where req.guidRequirementId == guidRequirementId 
     && (!db.ViewMIPRAlls.Any(x=>x.guidRequirementId == req.guidRequirementId)) 
order by req.dtmEnd  
select new