【发布时间】:2017-01-25 12:01:07
【问题描述】:
我从来没有用过JOIN(INNER, OUTER),我也不知道什么时候是最好的场景:
这里有两个ActionResults 的示例,它们使用2 或3 个查询来获取对象,使用JOIN 不是更好吗?
第一个例子:
public ActionResult JobTags(int id)
{
var jobTagsList = (from j in db.JobTags
where j.JobID == id
select j.TagID).ToList();
var tags = (from j in db.Tags
where jobTagsList.Contains(j.ID.ToString())
select j).ToList();
return View(tags);
}
我可以只JOIN这两个表并选择最后的那个j吗?
第二个例子:
public ActionResult ImageListWhoApp(int id)
{
//We get here the ID from Job page using dbo.Jobs
var userIdList = (from j in db.Jobs
where j.ID == id
select j.ID.ToString()).ToList();
//We get here who applied at this job using dbo.AppliedJobs
var appJobIdList = (from j in db.AppliedJobs
where userIdList.Contains(j.JobID.ToString())
select j.UserID).ToList();
//Finally we get here the avatars of the user who applied at the job
//We are using this as a hyperlink to user profile.
var appUserImage = (from j in db.Images
where appJobIdList.Contains(j.UserID.ToString())
select j).ToList();
return View(appUserImage);
}
这种方法是不是越来越荒谬了?或者以这种方式做这样的事情是正常的?如何从这 3 个 SQL 语句中生成 JOIN?可能吗?这是更好的方法吗?
感谢您的宝贵时间!
【问题讨论】:
-
您的模型类中没有导航属性吗?它们是使联接几乎没有必要的原因。
-
我也是,因为与 T-SQL 中的
JOIN相比,LINQ 中的JOIN冗长且有限。 -
如果您使用 EF 并具有导航属性,则通常不需要
JOIN。但是,如果您有两个包含要组合的对象的列表,那么这很有意义。 -
@qxg:详细程度是高度基于意见的,对于 LINQ 中
.Join()的限制,您应该查看.GroupJoin()。 -
是的,我完全忘记了导航属性,在这种情况下,无论如何我都不需要
JOIN,这只是在问自己为什么我现在根本没有使用JOIN。但是一次返回两个列表是有道理的,我从来不需要那个。
标签: asp.net-mvc linq join