我试图获取数据库中具有给定'UserGuid'的第一项,但'First'扩展方法抛出以下异常:System.InvalidOperationException: Sequence contains no elements
以下是一些有效和无效的例子:
// Works
var FoundUser1 = MyEntities.Users.First();
// Works
var FoundUser3 = MyEntities.Users.ToList().First(r => r.UserGuid == SampleUserGuid);
// Throws System.InvalidOperationException: Sequence contains no elements.
var FoundUser2 = MyEntities.Users.First(r => r.UserGuid == SampleUserGuid);
有人有什么想法吗?
修改
更奇怪的代码示例:
// UserList1 is empty
var Query1 = from x in MyEntities.Users
where x.UserGuid == criteria.Value
select x;
var UserList1 = Query1.ToList();
// UserList2 has 3 users, including one with a
// matching guid value.
var Query2 = from x in MyEntities.Users
select x;
var UserList2 = Query2.ToList();
var Query22 = from x in Query2
where x.UserGuid == criteria.Value
select x;
var UserList22 = Query22.ToList();
// Works
User FoundUser = null;
foreach (var ThisUser in MyEntities.Users)
{
if (ThisUser.UserGuid == criteria.Value)
FoundUser = ThisUser;
}
答案 0 :(得分:4)
什么是例外,它是“空集”异常还是类似的东西?
尝试
FirstOrDefault()
而不是
First()
看看会发生什么。如果没有可用的记录,First()将抛出异常。如果没有可用的记录,FirstOrDefault()将为您提供空的User对象。
答案 1 :(得分:0)
在这段代码中:
// UserList1 is empty
var Query1 = from x in mgr.ObjectContext.Users
where x.UserGuid == criteria.Value
select x;
var UserList1 = Query1.ToList();
criteria.Value的值是什么,如果你Debug.Print呢?
答案 2 :(得分:0)
尝试比较其字符串值,如
x.UserGuid.ToString() == criteria.Value.ToString()
互联网上还有其他一些例子,他们无法直接比较guid。这是一个:http://bytes.com/groups/net-vb/364009-comparing-guids
答案 3 :(得分:0)
事实证明问题在于SQLite处理GUID类型。如果你设置
BinaryGuids=True
然后它们被保存为16字节的二进制文件,并且不能与基于字符串的guid“匹配”。您也可以将其设置为false并将它们匹配为字符串,但您需要查看alpha字符的大小写。