使用dapper.net检查空值

时间:2015-03-17 15:36:57

标签: c# sql-server dapper

我正在使用dapper将值读入我创建的对象中,其中我使用基本存储过程。

IF EXISTS(SELECT LOWER(UT.UserID) FROM UserTable UT WHERE UT.UserID = @UserId)
BEGIN
    SELECT 
    UT.UserID,
    UT.Name, 
    UT.Surname, 
    UT.TrackingString
    FROM UserTable UT
    WHERE UT.UserID = @UserId
END

这是我视图模型中的代码。

 IDbConnection connection;
        using (connection = new SqlConnection(ConfigurationManager.ConnectionStrings["Liberty"].ToString()))
        {
            var result = connection.QueryMultiple("GetUserData", new { UserId = userId.ToLower() }, commandType: CommandType.StoredProcedure);
            user = result.Read<UserData>().First();

        }

如果选择了列,我该如何检查结果 如果没有用户数据(如果用户不存在),我现在得到InvalidOperation异常。

2 个答案:

答案 0 :(得分:3)

使用正确的Linq方法。您正在使用不将结果视为无效结果的结果,而如果不存在此类用户,则查询可能不会返回任何值。

切换到一个方法,该方法不会在返回枚举中抛出任何元素,然后检查null并正常处理它。

    // snip
    user = result.Read<UserData>().FirstOrDefault();
}
if(user == null)
{
    // no such user exists, go do something about it

答案 1 :(得分:1)

为什么使用QueryMultiple?使用查询&lt;&gt;代替。然后在result.first()之前执行result.Count()。或者做FirstOrDefault()

我可能还建议你创建一个接收数据的类吗?

public class User
{
    public int UserID {get; set;}
....
}

然后使用connection.Query(“....”,new ...)

眼睛好多了。