我在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個小時在這幾天,幾秒鐘內張貼,我找到了答案!
+1:我喜歡這種消歧。 – 2011-04-19 13:52:33
是的,我剛剛嘗試過,它的工作原理。我修改了OP。謝謝你的幫助。 – SteveA 2011-04-19 13:58:17
不客氣 – 2011-04-19 14:08:48