Linq左连接含截取逻辑异常:无匹配时返回全量Data3数据求助
问题分析与解决方案
核心问题
你遇到的问题根源在于字符串截取逻辑错误:当LongKeywordDesc中没有空格时,你将截取结束位置设为0,导致Substring(0, 0)返回空字符串。这会意外匹配Data3中所有KeywordDesc为空的记录,从而在无对应匹配时返回大量无关数据。
修正步骤
- 修复字符串截取逻辑:当
LongKeywordDesc不含空格时,应直接使用完整字符串进行匹配,而非生成空字符串。 - 添加空值保护:左连接无匹配时
c会为null,需用?.运算符避免空引用异常。
修正后的代码
var test = (from a in dbData.Data2 let spaceIndex = a.LongKeywordDesc.IndexOf(' ') // 无空格时取完整字符串,否则截取空格前部分 let keywordDescPart = spaceIndex < 0 ? a.LongKeywordDesc : a.LongKeywordDesc.Substring(0, spaceIndex) join c in dbData.Data3 on new { KeywordDesc = keywordDescPart, Stsrc = true } equals new { KeywordDesc = c.KeywordDesc, Stsrc = (c.Stsrc != AppConstant.StrSc.Deactive) } into c_leftjoin from c in c_leftjoin.DefaultIfEmpty() where lmsCourseOutlineIds.Contains(a.CourseOutlineID) select new { data = a.KeywordID, data2 = c?.KeywordID, data3 = c?.KeywordDesc, }).ToList();
额外说明
- 优化变量名提升可读性,便于后续维护。
- 确保
Stsrc的匹配逻辑符合业务需求:仅关联Stsrc不为Deactive的Data3记录。
内容的提问来源于stack exchange,提问作者Amelia Febriani
相关产品推荐
相关产品推荐

