Я создал запрос в Linq-to-entity (4.0), который запутал меня, поскольку я объединяю несколько таблиц, две из которых имеют имя столбца (DateCreated).Когда я пытаюсь использовать orderby между двумя таблицами с одинаковым именем столбца, я получаю следующую ошибку: «Столбец DateCreated» в предложении order является неоднозначным «
Я запутался, поскольку думал, что указание таблицы будет означатьэто передало бы это к запросу 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
Я что-то упустил или сделал что-то не так?
PS Это соединение с 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 на выбор нового.Это сейчас работает.Тем не менее, я все еще не понимаю, почему он не будет делать то же самое, когда orderby находится в основном запросе.Хей-хо!Немного раздражает, что я потратил около 5 часов на это в течение нескольких дней, и через несколько секунд после публикации я нашел ответ!