円グラフを描画するビューにJsonリストオブジェクトを返す次のコントローラコードがあります。LINQ to SQL条件式where節
4つの入力パラメータがあり、それらのうち3つで作業しています。
ただし、「SiteTypeId」と題されたfistパラメータは、どこに含まれる必要があります。
私の問題は、このコードをきれいにコードに組み込む方法です。私は関数のオーバーライドを避けたいと思います。
必要な追加のロジックは次のとおりです。
SiteTypeId = -1
場合(これがすべてのように何も変更する必要はありません示し意味)SiteTypeId = 0
あれば(そしてi.SiteTypeId == 0
ニーズ追加する)SiteTypeId = 1
場合(i.SiteTypeId == 1
を追加する必要があります)
上記の2と3がすべて必要な場合uldは簡単だと思います。おそらくLINQを2つの状態に分割するためのきちんとした表現でなければならないと思います。
私は、LINQに新たなんだ - 誰も私に助言することができ、ここで私は変更する必要があり、コントローラのコードは次のとおりです。
public JsonResult GetChartData_IncidentsBySiteStatus(string SiteTypeId, string searchTextSite, string StartDate, string EndDate)
{
if (searchTextSite == null)
searchTextSite = "";
DateTime startDate = DateTime.Parse(StartDate);
DateTime endDate = DateTime.Parse(EndDate);
var qry = from s in _db.Sites
join i in _db.Incidents on s.SiteId equals i.SiteId
where s.SiteDescription.Contains(searchTextSite)
&& (i.Entered >= startDate && i.Entered <= endDate)
group s by s.SiteStatus.SiteStatusDescription + "[" + s.SiteTypeId.ToString() + "]"
into grp
select new
{
Site = grp.Key,
Count = grp.Count()
};
return Json(qry.ToList() , JsonRequestBehavior.AllowGet);
}
1に以下を追加し、私はPredicateBuilderの周りに基づいて動的なExpressionFilterを構築することになりました。それは美味しいテクニックです。 :) –