2009-11-10 63 views
0

我在用下面的语句,这是返回错误 “序列不包含任何元素” 的麻烦:帮助与SQL/LINQ调试

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) [[email protected]] 
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.4918 

当在SQL Server管理工作室中运行时,脚本会返回我期望的行(位于表中)

我用此行定义了p0:

DECLARE @p0 NVarChar(20) = '[email protected]' 

任何想法,为什么这是失败?谢谢!

回答

1

您正在获取的InvalidOperationException仅在查询产生时引发无结果

(因为你说你是确保数据库上存在的行)是在我脑海中,唯一的一点是,你也许连接到其他数据库

检查您的DataContext的连接字符串,并确保您在Management Studio中查询相同的数据库。

编辑: BTW,你是直接查询SqlMembershipProvideraspnet_Users表,通过UserName找到用户,你可能想给一个看向Membership.FindUsersByName方法。

+0

你可能是对的,我忽略了这一点。 – 2009-11-10 06:23:55

+0

连接字符串是:) – stringo0 2009-11-10 06:25:44

+0

@Johannes:是的,我不得不重新读这个问题来弄清楚:) – CMS 2009-11-10 06:33:30

3

.Single()如果调用的集合为空或包含多个元素,则总是失败。 SQL Server不会返回任何行,这在这里必须是这种情况。

您可以使用.FirstOrDefault().SingleOrDefault()并根据您是否期望查询返回单个元素来检查返回值是否与空值相对应。

E.g.您对您筛选的行“UserName”有一个唯一的约束,您应该使用.SingleOrDefault()。如果返回null,则未找到任何行。多行将永远不会被返回。