2009-11-10 110 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,則未找到任何行。多行將永遠不會被返回。