Hol*_*tte 2 c# nhibernate linq-to-nhibernate asp.net-mvc-3
我知道我在这里做错了,我只是不知道是什么,因为我不太确定问题是什么.这是被称为的代码:
电话
System.Linq.Expressions.Expression<Func<AccountDataModel, bool>> deleg =
(m => m.Email == model.Email);
AccountDataModel query = database.FindBy(deleg);
Run Code Online (Sandbox Code Playgroud)
电话通向哪里
public T FindBy(Expression<Func<T, bool>> expression)
{
return FilterBy(expression).Single();
}
public IQueryable<T> FilterBy(Expression<Func<T, bool>> expression)
{
return All().Where(expression).AsQueryable();
}
public IQueryable<T> All()
{
return (from data in _session.Query<T>()
select data);
}
Run Code Online (Sandbox Code Playgroud)
抛出异常
Sequence contains no elements
Run Code Online (Sandbox Code Playgroud)
泽细节
基本上,我现在正在尝试测试的是我网站上的注册模块,该模块应该搜索已经提供的电子邮件以查看它是否存在.我在数据库中隐藏了一个加密的电子邮件地址(是的,模型中的电子邮件也已加密),这应该与提供的注册电子邮件相匹配.问题是没有返回任何结果.
我到底错在了什么?
.Single当序列为空时,您的调用将抛出此异常.如果可能没有找到匹配项,您应该使用.SingleOrDefault,null如果不存在匹配项,将返回该匹配项.
就明白之间的差别是非常重要的Single,SingleOrDefault,First,和FirstOrDefault.
以下是这些方法的有用可视化:
????????????????????????????????????????????????????????????????? ? ? [] (Empty) ? ["one"] ? ["one", "two",...] ? ????????????????????????????????????????????????????????????????? ? FirstOrDefault ? null ? "one" ? "one" ? ? First ? Exception ? "one" ? "one" ? ? SingleOrDefault ? null ? "one" ? Exception ? ? Single ? Exception ? "one" ? Exception ? ????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????? ? Error messages: ? no elements ? ? multiple elements ? ?????????????????????????????????????????????????????????????????
如您所见,FirstOrDefault是唯一不会抛出异常的人.
因此,它归结为:
使用First,, SingleOrDefault或者唯一的理由Single是,如果您的结果不符合您的预期,将会抛出异常!
这将为您提供更好的调试体验,并为您的代码提供更好的语义含义.
| 归档时间: |
|
| 查看次数: |
2083 次 |
| 最近记录: |