来自lambda表达式的JsonResult使用join

时间:2015-08-23 20:14:20

标签: asp.net asp.net-mvc linq lambda

我使用以下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);
}

1 个答案:

答案 0 :(得分:0)

  

仅存在于LyncUsers中但DDI中不存在的DDI编号(...)

对我来说,这意味着您要返回LyncUsers DDI DDI.Number并不存在DDI

你的代码,一个内部联接,完全相反。它返回两个值(Numberreturn 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 } }