-1

我有一个 LINQ 查询,需要一个WHERE分句。

var query = DbProvider.DB.AsEnumerable().Where(p => p.Accepte.HasValue).OrderByDescending(p => p.Score).Select((user, index) => new 
                {
                    user.Id,
                    user.Score,
                    index
                })
                .Where(user => user.Id == Id).FirstOrDefault();

如果我删除.Where(p => p.Accepte.HasValue)它可以工作,但位置不正确。因为它包括未接受的用户。

当我添加.Where(p => p.Accepte.HasValue)它返回null。

我应该如何使用它?

4

1 回答 1

1

如果属性Accepte是可为的布尔值,您还需要通过评估Value-property 来检查值本身,因为HasValue可为空类型的 -property 仅指示是否存在可用值。它基本上是检查值是否null存在。

因此,要实现您的目标,请使用以下代码:

var query = DbProvider.DB
    .AsEnumerable()
    .Where(p => p.Accepte.HasValue && p.Accepte.Value)
    .OrderByDescending(p => p.Score).Select((user, index) => new 
            {
                user.Id,
                user.Score,
                index
            })
    .FirstOrDefault(user => user.Id == Id);
于 2013-09-23T12:08:14.560 回答