我使用以下Lambda表达式尝试连接两个模型(LyncUser)和(DDI),并仅返回两个模型中存在的DDI编号。在LyncUser中,该字段称为LyncUser.DDI,在DDI中称为DDI.Number。
这适用于并返回从LyncUsers控制器使用的所有DDI编号的列表。
var lyncDB = new LyncUserEntities();
return Json(lyncDB.lyncUsers
.Select(c => new { DDI = c.DDI }), JsonRequestBehavior.AllowGet);
当我将其更改为合并连接时,只返回LyncUsers中存在但DDI中不存在的DDI编号,但它无法返回任何内容。
public JsonResult GetAvailableDDINumbers()
{
var lyncDB = new LyncUserEntities();
return Json(lyncDB.LyncUsers
.Join(lyncDB.DDIs, avail => avail.DDI, used => used.Number,
(used, avail) => new { used = used, avail = avail })
.Where(joined => joined.used.DDI == joined.avail.Number), JsonRequestBehavior.AllowGet);
}
答案 0 :(得分:0)
仅存在于LyncUsers中但DDI中不存在的DDI编号(...)
对我来说,这意味着您要返回LyncUsers
DDI
DDI.Number
并不存在DDI
。
你的代码,一个内部联接,完全相反。它返回两个值(Number
和return Json(lyncDB.LyncUsers
.Where(u => !lyncDB.DDIs.Any(ddi => ddi.Number == u.DDI)), JsonRequestBehavior.AllowGet);
)相等的实体。而且显然,目前还没有达到这种条件。
要达到你想要的效果,你应该使用不同的声明:
lyncDB.LyncUsers
目前应返回所有{
"question": {
"categories": [], // an array of ids
"recommendations": [], // an array of ids
"patternAnswers": [], // an array of ids
"comments": [], // an array of ids
"id": Number, // question id
... // others
}
}
。