как конкатенировать поле в linq к sql - PullRequest
0 голосов
/ 29 сентября 2011

Я хотел бы выполнить следующий SQL-запрос в Linq to SQL.

 SELECT     TOP dbo.SiteDept.SiteDeptId, dbo.Site.SiteName + ' / ' + dbo.Dept.DeptName AS SiteDeptName, dbo.SiteDept.SiteId, dbo.SiteDept.DeptId, 
                      dbo.Dept.DeptName
FROM         dbo.SiteDept INNER JOIN
                      dbo.Site ON dbo.SiteDept.SiteId = dbo.Site.SiteId INNER JOIN
                      dbo.Dept ON dbo.SiteDept.DeptId = dbo.Dept.DeptId

У меня есть контекст данных Linq to SQL как с сайтом, так и с объектом Dept, и с объектом SiteDept, который связывает отделы сместа.

Я также добавил в настраиваемое поле в частичном классе SiteDept для SiteDeptName.

Я думал что-то вроде следующего.

   public IEnumerable<SiteDept> GetAllSiteDepts()
    {
        var dataContext = new AtomWebDataContext(_connectionString);

        var allSiteDepts = from sd in dataContext.SiteDepts
                           join s in dataContext.Sites
                               on sd.SiteId equals s.SiteId
                           join d in dataContext.Depts
                               on sd.DeptId equals d.DeptId
                           select new SiteDept()
                                      {
                                          SiteDeptId = sd.SiteDeptId,
                                          SiteId = sd.SiteId,
                                          DeptId = sd.DeptId,
                                          SiteDeptName = s.SiteName + "/" + d.DeptName
                                      };
        return allSiteDepts;
    }

Однако я получаю «Явное построение типа объекта« GPSO.Repository.SiteDept »в запросе не разрешено».

Какой лучший способ добиться того, чего я хочу?

1 Ответ

0 голосов
/ 29 сентября 2011

Проблема в том, что SiteDept является одной из ваших сущностей, и она не позволит вам создать ее напрямую. Способ справиться с этим - установить отношения между сущностями и заставить LINQ to SQL извлечь их все, а затем использовать свойство в частичном классе, чтобы ввести нужное имя.

public IEnumerable<SiteDept> GetAllSiteDepts()
{
    var dataContext = new AtomWebDataContext(_connectionString);

    var allSiteDepts = from sd in dataContext.SiteDepts
                       select s;

    return allSiteDepts.ToList();
}

// Site and Dept are EntityRefs on SiteDept and Site, respectively
public partial class SiteDept
{
     public string SiteDeptName
     {
         get { return this.SiteName + "/" + this.Site.Dept.Name; }
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...