与';第一';LINQ到EF的操作
我试图获取数据库中具有给定“UserGuid”的第一项,但“first”扩展方法引发以下异常:与';第一';LINQ到EF的操作,linq,linq-to-entities,Linq,Linq To Entities,我试图获取数据库中具有给定“UserGuid”的第一项,但“first”扩展方法引发以下异常:System.invalidoOperationException:序列不包含任何元素 以下是一些有效和无效的示例: // Works var FoundUser1 = MyEntities.Users.First(); // Works var FoundUser3 = MyEntities.Users.ToList().First(r => r.UserGuid == SampleUserG
System.invalidoOperationException:序列不包含任何元素
以下是一些有效和无效的示例:
// 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;
}
什么是异常,是“空集”异常还是类似的异常 试一试 而不是
First()
看看会发生什么。如果没有可用记录,First()将引发异常。如果没有可用记录,FirstOrDefault()将为您提供一个空用户对象。什么是异常,是“空集”异常还是类似的异常 试一试 而不是
First()
看看会发生什么。如果没有可用记录,First()将引发异常。如果没有可用的记录,FirstOrDefault()将为您提供一个空的用户对象。在这段代码中:
// UserList1 is empty
var Query1 = from x in mgr.ObjectContext.Users
where x.UserGuid == criteria.Value
select x;
var UserList1 = Query1.ToList();
如果调试,criteria.value的值是多少?打印它?在这段代码中:
// UserList1 is empty
var Query1 = from x in mgr.ObjectContext.Users
where x.UserGuid == criteria.Value
select x;
var UserList1 = Query1.ToList();
如果调试,criteria.value的值是多少?打印它?尝试比较它们的字符串值,如中所示
x.UserGuid.ToString() == criteria.Value.ToString()
互联网上还有其他一些例子,说明人们在直接比较guid时遇到了困难。这里有一个:尝试比较它们的字符串值,如中所示
x.UserGuid.ToString() == criteria.Value.ToString()
互联网上还有其他一些例子,说明人们在直接比较guid时遇到了困难。这里有一个:问题在于SQLite处理GUID类型。如果你设定
BinaryGuids=True
然后,它们被保存为16字节二进制文件,不能与基于字符串的GUID“匹配”。您还可以将其设置为false,并将它们作为字符串匹配,但您需要注意alpha字符的大小写。事实证明,问题在于SQLite处理GUID类型。如果你设定
BinaryGuids=True
然后,它们被保存为16字节二进制文件,不能与基于字符串的GUID“匹配”。您也可以将其设置为false,它们作为字符串匹配,但您需要注意字母字符的大小写。set是空的,但问题是,当存在有效数据时,set为什么为空(如所有“工作”示例所示)。“set”是空的,但当存在有效数据时,set为什么为空(如所有“工作”示例所示)标准一是:{e7bf9773-8231-44af-8d53-e624f0433943}我的示例数据列表中的3(显示在用户列表2中)是:{7ab8196e-f0bd-4db3-b6b4-3513c18b7c7f}{1dd40287-35a4-42cd-a380-c458c8ca7e62}{e7bf9773-8231-44af-8d53-E624F03943}UserGuid和Value的类型是什么?它们都是字符串吗?这两种类型都是“Guid”,我用“where x.UserGuid.Equals(criteria.Value)”尝试了一下,但没有任何运气。标准之一是:{e7bf9773-8231-44af-8d53-e624f0433943}我的示例数据列表中的3(显示在UserList2中)是:{7ab8196e-f0bd-4db3-b6b4-3513c18b7c7f}{1dd40287-35a4-42cd-a380-c458c8ca7e62}{e7bf9773-8231-44af-8d53-e624f0433943}UserGuid和Value的类型是什么?它们都是字符串吗?这两种类型都是“Guid”,我用“where x.UserGuid.Equals(criteria.Value)”尝试了它,但没有任何运气。与ToString()比较无论BinaryGuids设置如何,都应始终有效。与ToString()相比,无论BinaryGuids设置如何,都应始终有效。