You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Lambda连接多表并拼接字段绑定DataGridView问题求助

问题解决与优化方案

当前问题修复

你拼接BusinessPartner全名的方式有误,Concat方法用于拼接字符串序列,并非单个字符串的拼接逻辑。正确的字符串拼接方式如下:

修改查询中的全名拼接部分,同时给拼接后的字段命名(方便DataGridView绑定):

var result = (from evidence in listEvidence
              join detail in listDetail
              on evidence.Id equals detail.EvidenceId
              join countryname in listCountry
              on evidence.CountryId equals countryname.Id
              join partner in listPartner
              on evidence.PartnerId equals partner.Id
              select new
              {
                  evidence.TruckNo,
                  evidence.SerialNo,
                  evidence.Date,
                  // 正确拼接全名,处理空值避免出现无效字符串
                  FullName = $"{partner.Name ?? ""} {partner.Familly ?? ""}".Trim(),
                  detail.Id,
                  detail.EvidenceId,
                  detail.MerchandiseName,
                  detail.weight,
                  detail.Unit,
                  detail.Discription,
                  countryname.CountryName
              }).ToList();

同时确保你的DataGridView列的DataPropertyName设置为FullName,因为AutoGenerateColumns设为false,需要手动绑定对应字段。

更优实现方案

当前代码先把所有表的数据加载到内存再做关联,数据量大时会占用过多内存且效率低下。建议直接利用EF的IQueryable特性,让数据库层面执行关联和计算,只返回需要的数据:

优化后的查询代码

// 直接通过DbSet构建查询,不提前加载全表数据
var result = (from evidence in db.Evidence
              join detail in db.EvidenceDetail
              on evidence.Id equals detail.EvidenceId
              join countryname in db.Country
              on evidence.CountryId equals countryname.Id
              join partner in db.BusinessPartners
              on evidence.PartnerId equals partner.Id
              select new
              {
                  evidence.TruckNo,
                  evidence.SerialNo,
                  evidence.Date,
                  FullName = $"{partner.Name ?? ""} {partner.Familly ?? ""}".Trim(),
                  detail.Id,
                  detail.EvidenceId,
                  detail.MerchandiseName,
                  detail.weight,
                  detail.Unit,
                  detail.Discription,
                  countryname.CountryName
              }).ToList();

dgEvidenceList.AutoGenerateColumns = false;
dgEvidenceList.DataSource = result;

优势说明

  • 减少内存占用:仅查询和返回需要的字段,而非全表数据
  • 提升性能:关联和字符串拼接逻辑在数据库层面执行,比内存中处理更快
  • 简化代码:无需调用Get()/GetAllPartners()提前加载数据

内容的提问来源于stack exchange,提问作者abbas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 19:31:26