Linq将可空字符串与字符串进行比较

时间:2012-09-18 08:20:10

标签: c# .net linq nullable

我有以下LINQ:

        var items = from n in db.Roles
                    where n.importID == importID
                    select n;

“importID”是一个字符串作为参数和一个字符串?对于数据库对象。如果在数据库中importID为null,则不匹配。怎么做到这一点?

编译器消息:

Operator '==' cannot be applied to operands of type 'string?' and 'string'

4 个答案:

答案 0 :(得分:6)

字符串是引用类型,因此已经可以为空(即可以将其设置为null)。 Nullable类型的唯一目的是允许将值类型(例如整数,双精度等)设置为null。修复方法是将importId声明为string,而不是string?

答案 1 :(得分:4)

var items = from n in db.Roles
            where n.importID.HasValue && n.importId.Value == importID
            select n;

答案 2 :(得分:0)

您也可以使用.GetValueOrDefault()

简短查询可以......

var items = from n in db.Roles
                where n.importID == importID.GetValueOrDefault()
                select n;

答案 3 :(得分:0)

var items = from n in db.Roles
                    where !string.IsNullOrEmpty(n.importID) && n.importID == importID
                    select n;