我遇到以下语句时遇到问题,该语句返回错误“Sequence contains no elements”:
var vUser = (from u in this.dcLAUNCHOnline.aspnet_Users
where u.UserName.Equals(this.wCreateUser.UserName)
select u).Single();
正在生成的SQL:
SELECT [t0].[ApplicationId],
[t0].[UserId],
[t0].[UserName],
[t0].[LoweredUserName],
[t0].[MobileAlias],
[t0].[IsAnonymous],
[t0].[LastActivityDate],
[t0].[FirstName],
[t0].[LastName],
[t0].[Address_Street],
[t0].[Address_City],
[t0].[Address_Province],
[t0].[Address_Country],
[t0].[Address_PostalCode],
[t0].[Telephone_Main_AreaCode],
[t0].[Telephone_Main_Prefix],
[t0].[Telephone_Main_LineNumber],
[t0].[Telephone_Main_Extension],
[t0].[Telephone_Mobile_AreaCode],
[t0].[Telephone_Mobile_Prefix],
[t0].[Telephone_Mobile_LineNumber],
[t0].[Telephone_Mobile_Extension],
[t0].[Telephone_Other_AreaCode],
[t0].[Telephone_Other_Prefix],
[t0].[Telephone_Other_LineNumber],
[t0].[Telephone_Other_Extension],
[t0].[Gender],
[t0].[BirthDate]
FROM [dbo].[aspnet_Users] AS [t0]
WHERE [t0].[UserName] = @p0
-- @p0: Input NVarChar (Size = 20; Prec = 0; Scale = 0) [six.string@gmail.com]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.4918
在SQL Server管理工作室中运行时,脚本会返回我期望的行(在表中)
我用这一行定义了p0:
DECLARE @p0 NVarChar(20) = 'six.string@gmail.com'
为什么会失败的任何想法?谢谢!
答案 0 :(得分:3)
.Single()
总是会失败。 SQL Server不返回任何行,这必须是这里的情况。
您可以使用.FirstOrDefault()
或.SingleOrDefault()
并根据您是否希望查询返回单个元素来检查返回值。
E.g。您对要过滤的“UserName”行有唯一约束,您应该使用.SingleOrDefault()
。如果返回null,则未找到任何行。永远不会返回多行。
答案 1 :(得分:1)
只有当查询产生无结果时,才会抛出您获得的InvalidOperationException
。
我唯一想到的是,(因为你说你确定数据库中存在该行),你可能正在连接其他数据库强>
检查DataContext的连接字符串,确保查询与Management Studio中相同的数据库。
编辑:顺便说一句,您正在直接查询SqlMembershipProvider aspnet_Users
表,要按UserName
查找用户,您可能需要查看Membership.FindUsersByName
方法。