我正在使用C#和linQ开发一个项目。我想从BDD返回一个JsonList。一切都很好,直到我尝试分组,每个id只有一次(我也可以使用不同的)。 这是代码:
[HttpPost]
public ActionResult ProcessTypeStep()
{
var result = from a in db.ProcessTypeStep
join b in db.ProcessStep on a.ProcessTypeStepId equals b.ProcessTypeStepId
join c in db.ProcessStepOwner on b.ProcessStepId equals c.ProcessStepId
join e in db.ProcessTypeStepDesc on a.ProcessTypeStepId equals e.ProcessTypeStepId
select new { e.ProcessTypeStepId, e.ShortDescription };
result.Distinct();
result.GroupBy(w => w.ProcessTypeStepId).ToList();
return Json(result, JsonRequestBehavior.AllowGet);
}
所以这段代码返回1000行,我只想按ID分组或使用distinct,但两者都不起作用。什么都没有改变。
这是SQL中的代码,它正在运行:
select a.ProcessTypeStepId,e.ShortDescription
from ProcessTypeStep a
INNER join ProcessStep b on a.ProcessTypeStepId = b.ProcessTypeStepId
INNER join ProcessStepOwner c on b.ProcessStepId = c.ProcessStepId
INNER JOIN ProcessTypeStepDesc e on e.ProcessTypeStepId =a.ProcessTypeStepId
GROUP BY a.ProcessTypeStepId,e.ShortDescription
答案 0 :(得分:7)
result.Distinct()
返回一个新对象,但不会改变原始result
。因此,如果您不分配或将其传递给某些内容,则此语句无效。 GroupBy
或ToList
也是如此。替换:
result.Distinct();
result.GroupBy(w => w.ProcessTypeStepId).ToList();
return Json(result, JsonRequestBehavior.AllowGet);
使用:
return Json(result.Distinct().GroupBy(w => w.ProcessTypeStepId).ToList(), JsonRequestBehavior.AllowGet);
或者至少将LINQ操作的返回值赋给变量:
result = result.Distinct();
result = result.GroupBy(w => w.ProcessTypeStepId).ToList();
return Json(result, JsonRequestBehavior.AllowGet);
答案 1 :(得分:2)
LINQ操作在其输入上产生不可变的变化,而不是自己更改输入对象,因此这两行代码本身不做任何事情:
result.Distinct();
result.GroupBy(w => w.ProcessTypeStepId).ToList();
相反,您可以捕获每个操作的结果:
var distinctResult = result.Distinct();
var groupedResult = distinctResult.GroupBy(w => w.ProcessTypeStepId).ToList();
return Json(groupedResult, JsonRequestBehavior.AllowGet);
答案 2 :(得分:1)
尝试
result = result.Distinct().GroupBy(w => w.ProcessTypeStepId).ToList();
只使用result.Distinct()不修改列表,它会返回一个新列表。
答案 3 :(得分:1)
试试这个可能会有所作为谢谢......:)
[HttpPost]
public ActionResult ProcessTypeStep()
{
var result = from a in db.ProcessTypeStep
join b in db.ProcessStep on a.ProcessTypeStepId equals b.ProcessTypeStepId
join c in db.ProcessStepOwner on b.ProcessStepId equals c.ProcessStepId
join e in db.ProcessTypeStepDesc on a.ProcessTypeStepId equals e.ProcessTypeStepId
group by new
{
a.ProcessTypeStepId,
e.ShortDescription
} into GBC
select new { GBC.ProcessTypeStepId, GBC.ShortDescription };
result.Distinct();
return Json(result, JsonRequestBehavior.AllowGet);