Sequence不包含匹配元素使用Boolean的错误

时间:2015-04-14 23:59:06

标签: c# c#-4.0

bool Postkey =
    statement
        .ThreadPostlist
        .First(x => x.ThreadKey == ThreadKey && x.ClassKey == classKey)
        .PostKey;

这个凌查询给了我“序列不包含匹配元素”,但我知道我可以使用.FirstorDefault()。当我使用.FirstorDefault()时,如果没有匹配的记录,它会返回false bool的默认值。

但是我得到一个“对象未设置为对象的实例”错误。我需要使用boolnull检查.HasValue的{​​{1}}。我不知道怎么做。

3 个答案:

答案 0 :(得分:2)

以下是如何使用可空的bool来解决这个问题:

bool? postKey = null;
// This can be null
var post = statement.ThreadPostlist.FirstOrDefault(x=>x.ThreadKey == ThreadKey  && x.ClassKey == classKey);
if (post != null) {
    postKey = post.PostKey;
}
// Now that you have your nullable postKey, here is how to use it:
if (postKey.hasValue) {
    // Here is the regular bool, not a nullable one
    bool postKeyVal = postKey.Value;
}

答案 1 :(得分:1)

你可以这样做: -

bool? postkey = threadPostList
       .Where(x=>x.ThreadKey == threadKey && x.ClassKey == classKey)
       .Select(x => (bool?)x.PostKey)
       .DefaultIfEmpty()
       .First();

我认为更好地捕捉到你想要完成的目标。

答案 2 :(得分:1)

如果要将null值视为false(并且不想使用可空的bool),则可以在引用.PostKey属性之前检查生成的帖子是否为null,像这样:

var threadPost = statement.ThreadPostlist.FirstOrDefault(x => 
    x.ThreadKey == ThreadKey && x.ClassKey == classKey);

bool PostKey = threadPost != null && threadPost.PostKey;

或者,更长的形式是:

bool PostKey;

if (threadPost != null)
{
    PostKey = threadPost.PostKey;
{
else
{
    PostKey = false;
}