Linq如何使用Join的结果

时间:2011-06-16 08:47:46

标签: linq linq-to-entities

我需要对我的数据计算一些连接操作,对于这些操作的结果,我需要使用WHERE语句。

目前我使用下面的语法,没有错误,但结果不符合预期。 我确实需要将结果分组为我的联接并对其应用查询。

能否请您提供代码示例?不幸的是,我在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;

3 个答案:

答案 0 :(得分:1)

当前登录用户的可能相关数据不存在于任何一个或多个表(作者,内容,ImagesContents)中,并且由于这些表的内部联接,您没有得到任何结果。你可以尝试外连接。查看this article以查看Linq查询中的左外连接

答案 1 :(得分: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();

也许这可以帮助您获得预期的结果。

答案 2 :(得分:0)

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