【发布时间】:2011-09-29 12:13:31
【问题描述】:
我想在Linq to SQL中实现如下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 数据上下文,其中包含站点和部门实体以及将部门与站点相关联的 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'。”
实现我想要的最佳方式是什么?
【问题讨论】:
-
我认为 LINQ 识别
string.Concat。如果没有,请选择作为动态对象,然后针对allSiteDepts.AsEnumerable()执行新查询,您将能够使用常规方法。
标签: linq-to-sql