【发布时间】:2009-05-03 23:34:43
【问题描述】:
我有一个与this one 相关的问题。我不想进行计算(聚合),但我需要从关联中获取显示值。在我的 C# 代码中,我可以直接引用该值,因为外键约束使 Linq 生成所有必要的接线。 当我将 IQueryable 指定为 Gridview 数据源属性并引用不是结果集中主要实体的列的内容时,我收到该列不存在的错误。 作为 Linq 的新手,我猜测赋值隐式地将 IQueryable 转换为列表,并且关联丢失了。 我的问题是,这样做的好方法是什么?
我假设我可以通过编写一个并行查询来解决这个问题,该查询返回一个匿名类型,其中包含我需要用于 gridview 的所有列。似乎通过这样做,我会在内存中冗余地保存我已经拥有的数据。我可以在分配数据源时动态查询内存中的数据结构吗?还是有更直接的解决方案?
gridview 应该显示医生的医疗组关联,关联的名称在查找表中。
IQueryable<Physician> ph =
from phys in db.Physicians
//from name in phys.PhysicianNames.DefaultIfEmpty()
//from lic in phys.PhysicianLicenseNums.DefaultIfEmpty()
//from addr in phys.PhysicianAddresses.DefaultIfEmpty()
//from npi in phys.PhysicianNPIs.DefaultIfEmpty()
//from assoc in phys.PhysicianMedGroups.DefaultIfEmpty()
where phys.BQID == bqid
select phys;
(来源:heeroz.com)
因此,根据 Denis 的回答,我从查询中删除了所有不需要的内容。我想我可能一开始就问错了问题。
无论如何,该页面显示的是医生的数据。我想在网格中显示所有医疗团体隶属关系(并让用户插入、编辑和更新隶属关系)。我现在意识到我不需要显式加入这些其他表——Linq 为我做到了。我可以通过子关联链引用许可证号来访问单独的表中的许可证号。 我无法在 gridview 中引用医疗组名称,这让我回到了我的问题:
AffiliationGrid.DataSource = ph.First().PhysicianMedGroups;
这不起作用,因为 GridView 无法访问 med_group_print_name:
A field or property with the name 'med_group_print_name' was not found on the
selected data source.
再次,请耐心等待,如果我不理解 Linq 太明显了……因为我不理解。
【问题讨论】:
标签: linq-to-sql gridview join