gpt4 book ai didi

c# - Linq 到 NHibernate : Sequence Contains no Elements

转载 作者:行者123 更新时间:2023-11-30 20:07:41 25 4
gpt4 key购买 nike

我知道我在这里做错了什么,我只是不知道是什么,因为我不太确定问题出在哪里。这是调用的代码:

电话

System.Linq.Expressions.Expression<Func<AccountDataModel, bool>> deleg = 
(m => m.Email == model.Email);
AccountDataModel query = database.FindBy(deleg);

调用到哪里

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);
}

抛出异常

Sequence contains no elements

泽详情

基本上,我现在要测试的是我网站上的一个注册模块,该模块应该搜索 已提供的电子邮件以查看它是否存在。我在数据库中隐藏了一个加密的电子邮件地址(是的,模型中的电子邮件也已加密),它应该与提供的注册电子邮件相匹配。问题是没有返回任何结果。

我到底做错了什么?

最佳答案

当序列为空时,您对 .Single 的调用将抛出此异常。如果可能找不到匹配项,则应使用 .SingleOrDefault,如果不存在匹配项,它将返回 null

了解SingleSingleOrDefaultFirstFirstOrDefault 之间的区别非常重要。

以下是这些方法的有用可视化:

╔═════════════════╦═════════════╦═════════╦═════════════════════╗║                 ║ [] (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 是唯一不会抛出异常的。

所以,归根结底是这样的:
使用 FirstSingleOrDefaultSingle 的唯一原因是,如果您的结果不符合您的预期,将抛出异常!
这将为您提供更好的调试体验,并为您的代码赋予更好的语义意义。

关于c# - Linq 到 NHibernate : Sequence Contains no Elements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8109693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com