我正在使用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异常。
答案 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 ...)
眼睛好多了。