2011-04-19 42 views
2

我在Linq-to-entities(4.0)中創建了一個查詢,讓我感到困惑,因爲我加入了幾個表,其中兩個表共享一個列名(創建日期)。當我嘗試使用具有相同列名的兩個表之間的orderby時,出現以下錯誤:'列'DateCreated'中的order子句不明確'Linq-to-entities orderby給出模棱兩可的列名錯誤

我很困惑,因爲我認爲指定表意味着它會將其傳遞給SQL查詢。在下面的示例中,我指定了'orderby a.Datecreated',但是在TSQL中,它只有ORDER BY DateCreated,當我希望看到ORDER BY Extent1時。 DateCreated

using (PDFActionsEntities pdfEntities = new PDFActionsEntities()) 
{ 
    var actions = (from a in pdfEntities.PDFActions 
       join f in pdfEntities.Files on a.FileID equals f.FileID into list1 
       from l1 in list1.DefaultIfEmpty() 
       join wp in pdfEntities.WebPages on a.WebPageID equals wp.webpageid into list2 
       from l2 in list2.DefaultIfEmpty() 
       orderby a.DateCreated 
       select new 
       { 
        ID = a.ID, 
        FileID = a.FileID, 
        WebPageID = a.WebPageID, 
        UserID = a.UserID, 
        FilePath = l1.Path, 
        URLPath = l2.url, 
        DateCreated = a.DateCreated 
       }); 

} 

這裏是T-SQL它創建

SELECT 
`Extent1`.`FileID`, 
`Extent1`.`ID`, 
`Extent1`.`WebPageID`, 
`Extent1`.`UserID`, 
`Extent2`.`Path`, 
`Extent3`.`url`, 
`Extent1`.`DateCreated` 
FROM `tblpdfactions` AS `Extent1` LEFT OUTER JOIN 
`tblfiles` AS `Extent2` ON `Extent1`.`FileID` = `Extent2`.`FileID` LEFT OUTER JOIN 
`tblwebpageprints` AS `Extent3` ON `Extent1`.`WebPageID` = `Extent3`.`webpageid` 
ORDER BY `DateCreated` ASC 

我缺少的東西,或做錯了什麼?

P.S.如果這有什麼不同,它會連接到MySQL。


編輯:

剛過我問的問題,我看到了加入基於一個左一個問題,這導致我寫:

var actions = (from a in pdfEntities.PDFActions 
      join f in pdfEntities.Files on a.FileID equals f.FileID into list1 
      from l1 in list1.DefaultIfEmpty() 
      join wp in pdfEntities.WebPages on a.WebPageID equals wp.webpageid into list2 
      from l2 in list2.DefaultIfEmpty() 
      select new 
      { 
       ID = a.ID, 
       FileID = a.FileID, 
       WebPageID = a.WebPageID, 
       UserID = a.UserID, 
       FilePath = l1.Path, 
       URLPath = l2.url, 
       DateCreated = a.DateCreated 
      }).OrderBy(x => x.DateCreated); 

我增加了排序依據的選擇新的。這現在起作用。然而,我仍然困惑於爲什麼當orderby在主查詢中時它不會做同樣的事情。嘿!有點煩人,我花了大約5個小時在這幾天,幾秒鐘內張貼,我找到了答案!

回答

3

您是否曾嘗試將orderby移至select關鍵字之後的查詢末尾? 像:

actions.OrderBy(a => a.DateCreated); 
+0

+1:我喜歡這種消歧。 – 2011-04-19 13:52:33

+0

是的,我剛剛嘗試過,它的工作原理。我修改了OP。謝謝你的幫助。 – SteveA 2011-04-19 13:58:17

+0

不客氣 – 2011-04-19 14:08:48

0

這有可能正在生成TSQL爲您的特定的部分結構選擇新的語句。你有沒有嘗試改變財產的名稱,以不同的東西:

select new 
{ 
    ID = a.ID, 
    FileID = a.FileID, 
    WebPageID = a.WebPageID, 
    UserID = a.UserID, 
    FilePath = l1.Path, 
    URLPath = l2.url, 
    Created = a.DateCreated // Change is here 
} 
+0

最後一個屬性實際上是在以後添加的,並沒有影響整體結果。 @ Pr0fess0rX給出了非常正確的答案。謝謝。 – SteveA 2011-04-19 13:59:25

+0

@SteveA:是的,我的回答更像是一個贓物。我一見到他就投了票。 – 2011-04-19 15:14:03

相關問題