linq select语句中的空引用异常

问题描述 投票:0回答:1

我从下面的linq查询中获取空引用异常。我有一个带有EntityID(参考另一个表以获取翻译文本的表)的表,但是在某些情况下,我的子表中没有正确的翻译文本。这种情况下,我需要使用lookupName字段文本并分配给lookupName字段。

 await _context.FormLookup.Where(x=>!(x.isDeleted))
                .Select(x => new LookupList() { 
                    lookupID = x.lookupID, 
                    TransilatedName = _context.TranslatedText.FirstOrDefault(z => z.entityID == x.entityID && z.languageId == language && !(z.isDeleted)).languageText, 
                    lookupName = x.lookupName, 
                    itemCount = x.lookupDetails.Count(),
                    parent = x.parentID
                }).ToListAsync();

我需要添加一个条件,例如

TransilatedName = _context.TranslatedText.FirstOrDefault(z => z.entityID == x.entityID && z.languageId == language && !(z.isDeleted)) != null ? TransilatedName = _context.TranslatedText.FirstOrDefault(z => z.entityID == x.entityID && z.languageId == language && !(z.isDeleted)).languageText : x.lookupName,

有什么建议吗?

linq linq-to-sql entity-framework-core linq-to-entities
1个回答
0
投票

使用FirstOrDefault之前选择属性LanguateText:

var query = dbContext.FormLookup
    .Where(x=>!(x.isDeleted))
    .Select(x => new LookupList()
    { 
        lookupID = x.lookupID, 
        TransilatedName = dbContext.TranslatedText
            .Where(translatedText => translatedText.entityID == x.entityID
                                  && translatedText.languageId == language 
                                  && !translatedText.isDeleted)
            .Select(translatedText => translatedText.languageText)
            .FirstOrDefault(), 
        ...
    });
© www.soinside.com 2019 - 2024. All rights reserved.