2011-06-16 71 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