获取 "Sequence contains no elements" 异常
Getting "Sequence contains no elements" exception
我是 .net 框架、nhibernate 和 iqueryable 的新手。
我有一个 um_user_login_count table,它有 4 列。它们是 id、login_ip、login_count 和 login_user_id.
这是我的 UserLoginCount.cs
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Project.UserManagement" namespace="Project.UserManagement.Domain" schema="UserManagement">
<class name="UserLoginCount" table="um_user_login_count">
<id name="Id" column="id" generator="identity" />
<property name="Ip" column="login_ip" length="255" />
<property name="Count" column="login_count" length="255" />
<property name="UserId" column="login_user_id" />
</class>
</hibernate-mapping>
这是我的 LoginCount.cs 文件
namespace Project.UserManagement.Domain
{
using System;
using Iesi.Collections.Generic;
using Project.ORM;
public class UserLoginCount : UserManagementEntity<UserLoginCount>
{
public UserLoginCount() { }
public virtual int Id { get; set; }
public virtual string Ip { get; set; }
public virtual string Count { get; set; }
public virtual string UserId { get; set; }
}
}
这是我在 UMDataService 代码中声明的内容
public static IQueryable<UserLoginCount> UserLoginCount
{
get
{
return DataServiceInstance.CurrentSession.Query<UserLoginCount>();
}
}
这里是我调用服务的代码 -
public string GetLoginInfo(string id)
{
UserLoginCount cnt = UMDataServices.UserLoginCount.Single();
return cnt.Ip;
}
但我收到一条错误消息 "Sequence contains no elements"。我对此绝对陌生。我什至不确定我是否正确地问了这个问题。
UMDataServices.UserLoginCount.Single()
预计必须 正好 1 个条目。在您的情况下,没有条目并且会按预期抛出异常。
还有其他选项:SingleOrDefault(), First(), FirstOrDefault,...
您可以根据自己的需要选择一个。
这一行UserLoginCount cnt = UMDataServices.UserLoginCount.Single();
可能是罪魁祸首。您可以将其更改为 SingleOrDefault
并检查是否为空。
UserLoginCount cnt = UMDataServices.UserLoginCount.SingleOrDefault();
if(cnt != null) { /*do stuff */}
Single
在以下情况下抛出异常:
ArgumentNullException
- 源或谓词为空。
InvalidOperationException
- 没有元素满足谓词中的条件
- 不止一个元素满足predicate中的条件。
- 源序列为空。
您可以使用 SingleOrDefault
来阻止它。
UserLoginCount cnt = UMDataServices.UserLoginCount.SingleOrDefault();
string ip = null;
if(cnt != null)
ip = cnt.Ip;
return ip;
我是 .net 框架、nhibernate 和 iqueryable 的新手。
我有一个 um_user_login_count table,它有 4 列。它们是 id、login_ip、login_count 和 login_user_id.
这是我的 UserLoginCount.cs
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Project.UserManagement" namespace="Project.UserManagement.Domain" schema="UserManagement">
<class name="UserLoginCount" table="um_user_login_count">
<id name="Id" column="id" generator="identity" />
<property name="Ip" column="login_ip" length="255" />
<property name="Count" column="login_count" length="255" />
<property name="UserId" column="login_user_id" />
</class>
</hibernate-mapping>
这是我的 LoginCount.cs 文件
namespace Project.UserManagement.Domain
{
using System;
using Iesi.Collections.Generic;
using Project.ORM;
public class UserLoginCount : UserManagementEntity<UserLoginCount>
{
public UserLoginCount() { }
public virtual int Id { get; set; }
public virtual string Ip { get; set; }
public virtual string Count { get; set; }
public virtual string UserId { get; set; }
}
}
这是我在 UMDataService 代码中声明的内容
public static IQueryable<UserLoginCount> UserLoginCount
{
get
{
return DataServiceInstance.CurrentSession.Query<UserLoginCount>();
}
}
这里是我调用服务的代码 -
public string GetLoginInfo(string id)
{
UserLoginCount cnt = UMDataServices.UserLoginCount.Single();
return cnt.Ip;
}
但我收到一条错误消息 "Sequence contains no elements"。我对此绝对陌生。我什至不确定我是否正确地问了这个问题。
UMDataServices.UserLoginCount.Single()
预计必须 正好 1 个条目。在您的情况下,没有条目并且会按预期抛出异常。
还有其他选项:SingleOrDefault(), First(), FirstOrDefault,...
您可以根据自己的需要选择一个。
这一行UserLoginCount cnt = UMDataServices.UserLoginCount.Single();
可能是罪魁祸首。您可以将其更改为 SingleOrDefault
并检查是否为空。
UserLoginCount cnt = UMDataServices.UserLoginCount.SingleOrDefault();
if(cnt != null) { /*do stuff */}
Single
在以下情况下抛出异常:
ArgumentNullException
- 源或谓词为空。
InvalidOperationException
- 没有元素满足谓词中的条件
- 不止一个元素满足predicate中的条件。
- 源序列为空。
您可以使用 SingleOrDefault
来阻止它。
UserLoginCount cnt = UMDataServices.UserLoginCount.SingleOrDefault();
string ip = null;
if(cnt != null)
ip = cnt.Ip;
return ip;