- C# code
[HttpPost] public ActionResult UserJson(int? id,int? page, int? rows, string model) { int Page = page ?? 1; int Rows = rows ?? 10; QueryModel QModel = null; Dictionary<string, object> JsonObj = new Dictionary<string, object>(); if (!string.IsNullOrWhiteSpace(model)) { QModel = IntelligentQuery.AjaxQueryConverter.ToQueryModel(model); } if (id.HasValue) { JsonObj.Add("total", UserRepository.Get(QModel).Where(w => w.Position.OrganID == id).Count()); } else { JsonObj.Add("total", UserRepository.Get(QModel).Count()); } if (id.HasValue) { JsonObj.Add("rows", UserRepository.Get(QModel, orderBy: o => o.OrderBy(u => u.Position.PositionLevel)).Where(w => w.Position.OrganID == id) .Skip((Page - 1) * Rows) .Take(Rows) .Select(s => new { s.UserNo,s.Password, s.RealName, s.Sex, s.Birthday, s.IDCardNumber, s.Height, s.IsDisabled, s.Country, s.DomicilePlace, s.IsMarried, s.PoliticsStatus, s.Education, s.GraduateSchool, s.Degree, s.DegreeBySchool, s.ResidentialAddress, s.Post, s.TelPhoneNumber, s.Email, s.QQ, s.MSN, s.JoinDate, s.PositionID, s.Position.PositionName,s.Position.Organization.OrganID, s.Position.Organization.OrganName, s.State, s.PayType, s.CheckType,s.IsSuper, s.Remark, s.IsEnable })); } else { JsonObj.Add("rows", UserRepository.Get(QModel, orderBy: o => o.OrderBy(u => u.Position.PositionLevel)) .Skip((Page - 1) * Rows) .Take(Rows) .Select(s => new { s.UserNo, s.Password, s.RealName, s.Sex, s.Birthday, s.IDCardNumber, s.Height, s.IsDisabled, s.Country, s.DomicilePlace, s.IsMarried, s.PoliticsStatus, s.Education, s.GraduateSchool, s.Degree, s.DegreeBySchool, s.ResidentialAddress, s.Post, s.TelPhoneNumber, s.Email, s.QQ, s.MSN, s.JoinDate, s.PositionID, s.Position.PositionName, s.Position.Organization.OrganID, s.Position.Organization.OrganName, s.State, s.PayType, s.CheckType, s.IsSuper, s.Remark, s.IsEnable })); } Newtonsoft.Json.Converters.IsoDateTimeConverter timeConverter = new Newtonsoft.Json.Converters.IsoDateTimeConverter();//这里使用自定义日期格式,默认是ISO8601格式 timeConverter.DateTimeFormat = "yyyy-MM-dd";//设置时间格式 string json = Newtonsoft.Json.JsonConvert.SerializeObject(JsonObj, Newtonsoft.Json.Formatting.Indented, timeConverter);//转换序列化的对象 return Content(json, "application/json"); }
以上方法,是用来获取前台dagagrid的数据源的。
我想问的问题有2个。
第一个问题:
User实体,有属性PositionID,与Position实体外键关联。那么,若只需要取得User实体的值,则可以把.Select()直接去掉。但是当除了需要获取User实体的所有值,还需要获取用“PositionID”关联的Position实体中的“PositionName”时,就必须在.Select()中将User的每个属性罗列一次,并且加上s.Position.PositionName吗?
这样操作起来,如果User实体属性很多,岂不是很麻烦啊,不知道有没有简便方法?
第二个问题:
User实体,有属性PayType,由于数据库设计问题,不能与基础数据表进行外键关联。也就是需要left join。可我查了一下,Lambda表达式中的group join比较麻烦,只left join一次的话,代码尚可看清楚,要是多次,那就非常不便且完全没有可读性了。我要问的是,按照上面我给出的代码来看,有什么解决方法吗?难道必须left join么。
------解决方案--------------------------------------------------------
第一个问题,用include