VB.NET中LINQ左外连接报错:company未声明或不在当前作用域
问题解决:LINQ Group Join 编译错误及数据关联查询
错误原因
你写的Group Join语法中,Into Group之后原company变量已不在当前作用域——Group Join会将匹配的公司记录归集到Group集合中,无法直接引用原company变量。
正确的LINQ查询写法
方式1:逐个映射字段(推荐,适配DataGridView绑定)
Dim result = (From supplier In lstItemBarcodes Group Join company In lstCompanies On supplier.cnyID Equals company.CompanyID Into matchedCompanies = Group Select New With { ' 保留Item表的所有字段 supplier.Id, supplier.Description, supplier.cnyID, ' 获取对应公司描述,无匹配时显示空字符串 .CompanyDesc = If(matchedCompanies.Any(), matchedCompanies.First().companyDesc, String.Empty) }).ToList()
方式2:保留完整Item对象,附加公司描述
Dim result = (From supplier In lstItemBarcodes Group Join company In lstCompanies On supplier.cnyID Equals company.CompanyID Into matchedCompanies = Group Select New With { .Item = supplier, .CompanyDesc = If(matchedCompanies.Any(), matchedCompanies.First().companyDesc, String.Empty) }).ToList()
补充说明
Into matchedCompanies = Group:将与当前Item匹配的Company记录存入matchedCompanies集合(因cnyID是外键,通常集合仅含一条记录)If(matchedCompanies.Any(), ...):处理无匹配公司的场景,避免空引用异常- 绑定DataGridView时,方式1可直接绑定
result,列会自动对应字段;方式2需在列的DataPropertyName中指定Item.Id、CompanyDesc这类路径。
内容的提问来源于stack exchange,提问作者user10191234
相关产品推荐
相关产品推荐

