我将尝试详细描述我的问题。我有以下场景。
1.)我有3个表: business,customoffice(自定义办公室)和cusdesc(自定义办公室描述)
这种关系是一个企业有一个客户办公室,一个客户办公室有多个客户办公室。
表业务具有字段CustomOffice0,它是customoffice table.The表cuscode字段cuscode的外键。
目标是选择一个业务,包括使用实体框架的自定义办公室和自定义办公室描述。
2.)代码
我有一个填充数据网格的过程FillData。我的目标是显示3个表中的字段。我设法显示了来自表"Business“和"Customoffice”的数据,但我需要通过表"cusdesc“显示一个自定义办公室的描述,更具体的是字段"CSNAME”。
3.)我的问题是,当我包括("CUSTOMSOFFICE.CUSDESC")时,结果不包含来自表"CUSDESC“的数据,而只包含有多少记录符合条件,因此我无法访问字段"CSNAME”。
下面是操作步骤:
using (var _context = new ReftabEntities())
{
try
{
SetGlobalValues();
ObjectQuery<BUSINESS> q_business = _context.BUSINESS.Where("it.BUSINESSNO=" + int.Parse(pv_businessno)).Where(string.Format("(it.BUSINESSSTART <= DATETIME'{0:yyyy-MM-dd HH:mm}') and (it.BUSINESSCLOSED >= DATETIME'{0:yyyy-MM-dd HH:mm}')", pv_date)).Include("CUSTOMSOFFICE").Include("CUSTOMSOFFICE.CUSDESC");
gvBusinessList.Caption = "Total records selected: " + q_business.Count();
gvBusinessList.DataSource = q_business;
gvBusinessList.DataBind();
}
catch (Exception e)
{
errorPopup.Text = e.Message;
errorPopup.ShowOnPageLoad = true;
}
finally
{
_context.Dispose();
}
}
}你能给我一点提示吗?我做错了什么。
提前谢谢。
发布于 2013-01-10 17:12:52
Include操作符只要求EF加载一个与查询相关的实体。如果不使用Include,EF将只提取业务的属性,而不提取CUSTOMSOFFICE的属性。不需要" Include ("CONSOMSOFFICE.CUSDESC")“,因为您已经在第一个Include中加载了整个CUSTOMSOFFICE实体。
我看到您正在将结果绑定到网格视图,如果我没理解错的话,问题是网格视图中没有显示"CUSTOMSOFFICE.CUSDESC“。我相信这是因为网格视图试图呈现"CUSTOMSOFFICE“对象本身的表示,因为这是您绑定的项的直接属性。为了更好地控制网格视图的“列”,我建议使用LINQ将查询结果转换为您明确想要显示的内容。
我假设BUSINESSNO、BUSINESSSTART和BUSINESSCLOSED是业务实体本身的属性,BUSINESSNO是主键。让我将您的查询重写为以下内容:
var q_business = _context.BUSINESS.Include(b=>b.CUSTOMSOFFICE)
.Where(p => p.BUSINESSNO == int.Parse(pv_businessno)
&& p.BUSINESSSTART <= DateTime.Parse(pv_date)
&& p.BUSINESSCLOSED >= DateTime.Parse(pv_date) )
.FirstOrDefault();此查询将提取与给定pv_businessno匹配并符合您的日期标准的业务详细信息(包括相关的CUSTOMSOFFICE详细信息)。但是你还不能把它绑定到你的网格视图上,因为你可能会遇到同样的问题,CUSTOMSOFFICE.DESC不会显示。要确保正确显示,必须确定要包含的属性。例如,如果您只想显示下面的属性集:
您应该将输出转换为显式并立即包含这些属性。
var q_business = _context.BUSINESS.Include(b=>b.CUSTOMSOFFICE)
.Where(b => b.BUSINESSNO == int.Parse(pv_businessno)
&& b.BUSINESSSTART <= DateTime.Parse(pv_date)
&& b.BUSINESSCLOSED >= DateTime.Parse(pv_date) )
.Select(b => new {BusinessNo = b.BUSINESSNO,
BusinessName = b.BUSINESSNAME,
CustomsOfficeCode = b.CUSTOMSOFFICE.CUSCODE,
CustomsOfficeDesc = b.CUSTOMSOFFICE.CUSDESC } ) //This Select statement creates a new anonymous type that has Businessno, BusinessName, CustomsOfficeCode, and CustomsOfficeDesc properties
.FirstOrDefault();将其绑定到栅格视图时,它应该能够显示CUSDESC特性的值。
https://stackoverflow.com/questions/14253703
复制相似问题