Linq select对于两个嵌套对象之一返回null

本文关键字:返回 null 对象 嵌套 select 于两个 Linq | 更新日期: 2023-09-27 18:10:34

我有一个Linq选择语句,应该返回有2个嵌套对象的对象。问题是,其中一个嵌套对象返回null,而另一个则按预期工作。

下面是要查询的对象:

public class CharInvCard
{
    public int ID { get; set; }
    public Character Character { get; set; }
    public Card Card { get; set; }
    public bool inDeck { get; set; }
    public bool inHand { get; set; }
    public bool inDiscard { get; set; }
}

这是我的Linq查询:

IQueryable<CharInvCard> CardsInHand = from x in db.CharInvCards
                               where x.Character.ID == character.ID && x.inHand == true
                               select x;

在得到这个查询的结果后,我做了一个foreach循环,开始如下:

foreach (CharInvCard deckCardRec in CardsInHand)

在调试时,如果我检查deckCardRec的内容,我看到它具有ID, inHand, inDeck, inDiscard甚至是一个嵌套的字符对象(及其属性)的所有属性,但Card总是空的。

我已经检查并仔细检查了数据库中的Card_Id列是否使用与Card表对应的正确ID填充。

是什么导致卡嵌套对象返回为空,而字符嵌套对象正确返回?

Linq select对于两个嵌套对象之一返回null

您在linq查询中引用Character,因此包含它。你没有引用Card。尝试加载Cards如下:

IQueryable<CharInvCard> CardsInHand = from x in db.CharInvCards.Include("Cards")
                               where x.Character.ID == character.ID && x.inHand == true
                               select x;

我假设你的导航属性名为"Cards"。