当前位置: 代码迷 >> ASP.NET >> MVC,linq,json,有关问题不知道如何描述,跪求
  详细解决方案

MVC,linq,json,有关问题不知道如何描述,跪求

热度:9546   发布时间:2013-02-25 00:00:00.0
MVC,linq,json,问题不知道怎么描述,跪求~
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