Linq to SQL和Gridview Datasource
-
03-07-2019 - |
题
我有一个与这个相关的问题。我不想进行计算(聚合),但我需要从关联中获取显示值。在我的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那么明显......因为我没有。
解决方案
您的查询似乎很奇怪。你应该尝试简单地显示
ph = from phys in db.Physicians
where phys.BQID == bqid
select phys;
在你的网格中。这应该工作。 另外,为什么调用Load()?如果在网格绑定时没有处理DataContext,则不应该需要它。
如果您仍有问题,可以发布您收到的错误消息,这会有所帮助......
第2部分
问题是你的名字实际上不在PhysMedGroup中。您需要将一个级别导航到MedGroupLookup以访问该名称,因为它是该类的属性。
根据您使用的技术(似乎是WinForms或Web窗体),您需要配置数据绑定以访问MedGroupLookup.med_group_print_name。