您的位置:首页 > 其它

合并两个List

2016-03-13 16:14 435 查看

引言

        最近敲组织部的时候觉得一切都进行的挺顺利的,因为分给我的任务只要一个模块敲完了,其他的就是一个道理,就快了。后来,终于有一天,组长说我那的逻辑有问题。当时我就蒙了,怎么会有问题呢?我的模块在添加的时候有一个下拉框,这个下拉框需要绑定基础表中的Name和对象表中Id。分别绑在下拉框的id和text上。而我的id绑错了,绑的是基础表中的id,这样导致,我下面添加的时候是根据这个下拉框中选定内容再去对象表中查id,进行添加。如果这个对象的名字变了或者是这个在对象表中有两个不同年份的这个对象名,我这种方法就是错误的。所以,我不得不从头改我的逻辑和我的代码。。。。。。。。。

        本来以为只要在前面加上一步筛选就好了,没什么难度。可是。。。。。。。

        我首选的方案是:在controller中写两个方法,后台也是两个方法,分别拿到需要的id和text,然后在前台页面的时候将这两个绑定到下拉框上,但是到前面绑定的时候我怎么写都不对,所以我只能采取别的途径。

         方案二:在后台写两个方法,在contoller中使用一个方法将这两个方法得到的list进行合并。然后返回到页面,通过js绑定。

ViewModel

        首先,我们先要写一个合并的ViewModel。(这里DictionaryID是公共的字段)。

<span style="font-size:18px;">/**********************************************************************************
* 开发人:邢玉
* 开发组:开发小组(丁国华,马康,张振华,郑浩,范晓权,殷伟涛,邢玉,韦文文,周坤)
* 说明:
* 开发时间:2016/3/8 15:01:22
* 开发版本:V1.0.0
* *********************************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.Serialization;

namespace EvaluationSystem.ViewModel
{
[DataContract ]
public class CityBasicAndObjectViewModel
{
[DataMember]
public System.Guid DictionaryID { get; set; }

public CityBasicInfoViewModel CityBasicInfoViewModel { get;set;}
public CityObjectViewModel CityObjectViewModel { get; set; }

}

}
</span>

Controller

        首先我们要根据条件获取到两个List:List1和List2。定义一个合并的List3,遍历第一个List1,在List2中根据公共属性进行匹配,将匹配出来的对象添加到List3中。

         代码如下(cityBasicInfoList为List1,cityObjectList为List2,List1为List3):

<span style="font-size:18px;">#region QueryCityNameAndObjectID 通过类型查询单位名称并且获取objectID  邢玉 2016年3月8日
//根据获取到的类型的DictionaryID,在CityBasic表中查询cityName,赋给Text,在CityObject表中查询cityObjectID,赋给id。
public JsonResult QueryCityNameAndObjectID()
{
//获取考核年份
int Year = Convert.ToInt32 (Request["Year"]);
//获取选择的类型的dictionaryID
string typeID = Request["typeID"].ToString();

CityBasicInfoViewModel cityBasicInfo = new CityBasicInfoViewModel()
{
DictionaryID = new Guid(typeID)
};

//调用后台方法,获取cityName
List<CityBasicInfoViewModel> cityBasicInfoList = ICityBasicInfoService.queryCityBasicInfoByType(cityBasicInfo);
//根据DictionaryID和CityID和checkYear查询cityObjectID
CityObjectViewModel cityObjectInfo = new CityObjectViewModel()
{
DictionaryID = new Guid(typeID),
CityID = cityBasicInfoList[0].CityID ,
Year =  Year
};
List<CityObjectViewModel> cityObjectList = ICityObject.queryCityObjectIDByDictionaryID(cityObjectInfo,Year );

//合并两个查到的List
List<CityBasicAndObjectViewModel> List1 = new List<CityBasicAndObjectViewModel>();
//遍历cityBasicInfoList
foreach(CityBasicInfoViewModel c1 in cityBasicInfoList)
{
//从cityObjectList中查找DictionaryID匹配的对象
CityObjectViewModel  cityobject = cityObjectList.Find(e=>e.DictionaryID == c1.DictionaryID  );
if (cityobject != null)
{
//在cityObjectList中匹配的对象,添加到合并的集合中
CityBasicAndObjectViewModel  cityBasicAndObject = new CityBasicAndObjectViewModel (){
DictionaryID = c1.DictionaryID,
CityBasicInfoViewModel = c1,
CityObjectViewModel = cityobject
};
List1.Add(cityBasicAndObject);
}
}
return Json(List1, JsonRequestBehavior.AllowGet);
}
#endregion</span>

Js

<span style="font-size:18px;">$('#cityName').combobox({
url: "/CityExtraPoint/QueryCityNameAndObjectID?Year=" + checkYear + "&typeID=" + TypeID,
valueField: 'CityObjectID',
textField: 'CityName'
});
</span>

         这样就可以将查到的两个表中的不同的字段赋给下拉框的id和Text。

总结

        首先应该说一下我逻辑错了这个问题。现在还是学习阶段,我们可以在错误中成长。但是有的错误是可以避免的,后果也是很严重的。现在在这么一个小系统中是返工一下,如果是大系统,返工,那得是多长时间的加班。以后每次写逻辑之前应该自己先在纸上缕一遍,思路清晰了之后再开始动工。全局观很重要!

         这次也还好,因为这一个逻辑错误,可以锻炼我们思考问题的方式,也可以从别的方面得到提示。获得想不到的收获!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: