繁体   English   中英

在Linq表达式中使用可为空的类型

[英]Using nullable types in Linq expressions

var quantSubset =
    from userAns in userAnalysis.AllUserAnswers
    join ques in userAnalysis.AllSeenQuestions on userAns.QID equals ques.QID
    where (ques.QuestionType == "QT")
    select new {
        QuestionLevel = ques.LevelID,
        TimeTaken = userAns.TimeTaken,
        Points = userAns.Points,
        UsedWeapon = (userAns.UsedBy2 && userAns.UsedHint),
        WasCorrect = userAns.WasCorrect.HasValue ? userAns.WasCorrect.Value : null
    };

在我的选择表达式中,我想选择一个可为null的类型WasCorrect(表达式的最后一部分),但是显然我无法按照我目前尝试的方式进行操作。

如何获得WasCorrect作为可空类型

我尝试了?WasCorrect,但是在Visual Studio中也没有给出错误。

您需要将null值显式转换为可为null的类型:

WasCorrect = userAns.WasCorrect.HasValue ?
    userAns.WasCorrect.Value : (TheTypeName?)null

否则,C#将不知道条件表达式应为哪种类型。

除此之外,代码是完全多余的。 您可以简单地写:

WasCorrect = userAns.WasCorrect

您绝对必须能够写

select new { WasCorrect = userAns.WasCorrect }

如果userAns.WasCorrectNullable<bool>

这段代码执行没有问题:

class Test {
    public bool? NullableBool { get; set;}
}

class MainClass
{
    public static void Main ()
    {
        Test t1 = new Test { NullableBool = true };
        var a1 = new { NB = t1.NullableBool };

        Test t2 = new Test { NullableBool = null };
        var a2 = new { NB = t2.NullableBool };
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM