我想在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数据上下文,包含一个站点和Dept实体以及一个将部门与站点相关联的SiteDept实体。
我还在SiteDeptName的SiteDept分部类的自定义字段中添加了。
我正在思考以下几点。
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'是不允许的。”
什么是实现我想要的最佳方式?
答案 0 :(得分:0)
问题是SiteDept是您的某个实体,它不会让您直接创建一个实体。处理这个问题的方法是设置实体之间的关系,让LINQ to SQL全部获取它们,然后使用partial类上的属性来填写你需要的名称。
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; }
}
}