C# Linq到NHibernate:序列不包含元素
我知道我在这里做错了什么,我只是不知道是什么,因为我不太确定问题是什么。以下是代码,称为: 通话C# Linq到NHibernate:序列不包含元素,c#,asp.net-mvc-3,nhibernate,linq-to-nhibernate,C#,Asp.net Mvc 3,Nhibernate,Linq To Nhibernate,我知道我在这里做错了什么,我只是不知道是什么,因为我不太确定问题是什么。以下是代码,称为: 通话 System.Linq.Expressions.Expression<Func<AccountDataModel, bool>> deleg = (m => m.Email == model.Email); AccountDataModel query = data
System.Linq.Expressions.Expression<Func<AccountDataModel, bool>> deleg =
(m => m.Email == model.Email);
AccountDataModel query = database.FindBy(deleg);
Ze详细信息
基本上,我现在要测试的是我网站上的注册模块,它应该搜索一封提供给我的电子邮件,看看它是否存在。我在数据库中隐藏了一个加密的电子邮件地址(是的,模型中的电子邮件也已加密),该地址应该与提供的注册电子邮件相匹配。问题是没有返回任何结果
我到底做错了什么?您对
的调用。当序列为空时,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
的唯一原因是,如果结果不符合预期,将引发异常这将为您提供更好的调试体验,并使您的代码具有更好的语义。感谢您的响应-我将代码更改为您建议的代码,但仍然收到相同的错误。我是否有可能不正确地实现我的查询?只有在使用
Single
或First
时才会抛出“Sequence contains no elements”错误。。。它不会被*或default
@HollandSchutte抛出。我更新了我的答案,对不同的方法进行了更好的解释。希望这能帮助你找到问题的根源。谢谢你,斯科特。我会尽快复习。
Sequence contains no elements
╔═════════════════╦═════════════╦═════════╦═════════════════════╗
║ ║ [] (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 ║
╚═════════════════╩═════════════╩═════════╩═════════════════════╝