【发布时间】:2014-08-17 20:13:23
【问题描述】:
如何在 Entitydatasource 控件中合并两个表中的记录?我已经用谷歌搜索并在 SO 上搜索,但没有运气。我需要的SQL是
SELECT DISTINCT username FROM
(SELECT s.username FROM project_stakeholders s
UNION
SELECT t.username FROM project_team_members t)
我的实体结构如下:
project_stakeholders
----------------------
project_stakeholders.record_id (PK)
project_stakeholders.username
project_stakeholders.project
project_stakeholders.project_id (FK)
project_stakeholders.status
project_team_members
---------------------
project_team_members.record_id (PK)
project_team_members.username
project_team_members.project
project_team_members.project_id (FK)
project_team_members.status
我发现这个问题几乎可以回答我的问题,但我的问题更高级,因为我的子查询来自与主要实体无关的实体。
我已将我的数据源更改为 LiqDatasource 控件,并在 LinqDatasource 控件的 Onselecting 事件的代码后面添加了以下代码:
protected void TaskProfileDS_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
int project_id = 0;
if (Int32.TryParse(Request.QueryString["id"], out project_id))
{
using (MyEntitiesContext db = new MyEntitiesContext())
{
var TeamMembers = from tm in db.team_members where tm.project_id == project_id select tm.username;
var Stakeholders = from sh in db.project_stakeholders where sh.project_id == project_id select sh.username;
var result = from usr in db.project_profiles where (TeamMembers.Contains(usr.caption) || Stakeholders.Contains(usr.caption)) select usr;
e.Result = result;
}
}
}
但不幸的是,我收到以下错误:
操作无法完成,因为 DbContext 已被释放。
任何想法将不胜感激。
【问题讨论】:
-
某些类型是从其他类型派生的?如果是,请使用
dbset<baseType>().Union(dbset<Derived>())
标签: asp.net entity-framework entitydatasource linqdatasource