2011-06-16 67 views
0

我需要對我的數據計算一些連接操作,對這些操作的結果我需要使用WHERE語句。Linq如何使用在哪裏結果加入

在我使用下面這個語法沒有錯誤的時刻,但結果並不如預期。 當然,我需要將我的連接的結果分組並對其應用查詢。

您能否給我提供一個代碼示例?不幸的是,我在Linq很新,而且我無法做到。

var myImagesForUser = from i in context.CmsImagesContents 
         join c in context.CmsContents on i.ContentId equals c.ContentId 
         join a in context.CmsAuthors on c.AuthorId equals a.AuthorId 
         join u in context.aspnet_Users on a.UserId equals u.UserId 
         where u.UserId == (Guid)myLoggedInUser.ProviderUserKey 
         select i; 
+0

查詢沒什麼問題你在找什麼特定的代碼示例? – 2011-06-16 09:24:34

回答

1

當前登錄用戶的可能相關數據不存在於任何一個或多個表(作者,內容,ImagesContents)中,並且由於這些表的內部聯接而沒有得到任何結果。你可以嘗試外部連接。看看this article左外連接在LINQ查詢

+0

是的穆罕默德在經過一番測試後發現我的查詢正在運行,只是當前登錄用戶的相關數據不存在。感謝您的時間。 – GibboK 2011-06-16 10:14:45

+0

@Gibbok永遠受歡迎 – 2011-06-16 10:20:17

0

其中a.UserId ==(Guid)myLoggedInUser.ProviderUserKey。

1

嗯。我看到兩件事我會做不同的事情。

1)你忘了,以執行查詢調用.ToList()結尾。否則,可能是,您在處理後綴時誤用了LINQ語句。

var myImagesForUser = (YOUR LINQ STATEMENT).ToList(); 

2.)奇怪的是,您需要將UserKey轉換爲GUID。如果真的需要,我會在LINQ聲明之前執行並檢查本地變量。

var userId = (Guid)myLoggedInUser.ProviderUserKey; 
var myImagesForUser = (YOUR LINQ STATEMENT ... where u.UserId == userId).ToList(); 

也許這可以幫助您獲得預期的結果。

+0

感謝您對此的看法。 – GibboK 2011-06-16 10:13:59

+0

對不起,只有一個問題,爲什麼你會使用一個局部變量(你的答案2)?性能原因? – GibboK 2011-06-16 10:18:24

+0

@Gibbok:我不知道EF如何轉換它。它有兩種可能性:a)在內存中進行轉換; b)在SQL中使用(CAST())進行轉換。爲了決定a)我會在LINQ聲明之前手動完成。 – BitKFu 2011-06-16 11:11:39