我想联合,合并一个包含两个引用的List,所以这是我的代码,我该如何为这个porpouses定义一个列表呢?
if (e.CommandName == "AddtoSelected")
{
List<DetalleCita> lstAux = new List<DetalleCita>();
foreach (GridViewRow row in this.dgvEstudios.Rows)
{
var GridData = GetValues(row);
var GridData2 = GetValues(row);
IList AftList2 = GridData2.Values.Where(r => r != null).ToList();
AftList2.Cast<DetalleCita>();
chkEstudio = dgvEstudios.Rows[index].FindControl("ChkAsignar") as CheckBox;
if (chkEstudio.Checked)
{
IList AftList = GridData.Values.Where(r => r != null).ToList();
lstAux.Add(
new DetalleCita
{
codigoclase = Convert.ToInt32(AftList[0]),
nombreestudio = AftList[1].ToString(),
precioestudio = Convert.ToDouble(AftList[2]),
horacita = dt,
codigoestudio = AftList[4].ToString()
});
}
index++;
//this line to merge
lstAux.ToList().AddRange(AftList2);
}
dgvEstudios.DataSource = lstAux;
dgvEstudios.DataBind();
}
这是在rowcommand事件中。谢谢!
答案 0 :(得分:4)
如果您要将AftList2
中的所有条目添加到lstAux
,则应将AftList2
定义为IEnumerable&lt;&gt;使用DetalleCita
类型的元素(IEnumerable<DetalleCita>
足以用作AddRange()
上List<DetalleCita>
的参数。例如:
var AftList2 = GridData2.Values.Where(r => r != null).Cast<DetalleCita>();
然后您可以将其所有元素添加到lstAux
:
lstAux.AddRange(AftList2);
澄清:
我认为您误解了ToList()
的扩展方法。它创建来自IEnumerable<T>
的新列表,其结果与应用它的原始IEnumerable<T>
无关。
这就是为什么你只是在尝试做list.ToList().AddRange(...)
时没有做任何有用的事情 - 你正在将列表复制到(另一个由ToList()
新创建的)列表,更新它然后基本上扔掉它(因为你甚至没有做list2 = var1.ToList()
之类的事情,之后原始var1
保持不变!!!如果你正在调用它,你很可能想保存ToList()
的结果。)
此外,您通常不需要将一个列表转换为另一个列表,ToList()
在您需要列表(List<T>
)但有IEnumerable<T>
(不可索引且您)时非常有用可能需要通过索引进行快速访问,或者需要延迟计算,但是您需要在此时计算所有结果 - 在尝试使用LINQ结果查询对象时可能会出现两种情况:例如:IEnumerable<int> ints = from i in anotherInts where i > 20 select i;
- 即使{{1} } anotherInts
查询结果List<int>
无法投放到ints
,因为它不是列表,而是List<int>
的实现。在这种情况下,你无论如何都可以使用IEnumerable<int>
来获取列表:ToList()
)。
更新:
如果你真的是指工会语义(例如{1,2}和{1,3} union 就像{1,2,3}那样,没有重复相同的元素来自两个集合)考虑切换到List<int> ints = (from i in anotherInts where i > 20 select i).ToList();
(最有可能在你的情况下可用,因为你正在使用C#3.0,我想你最近有.NET框架)或使用HashSet<T>
扩展方法而不是{{1 (我不认为这比第一个解决方案更好并且要小心,因为它更像Union()
- AddRange
返回新集合并且不会更新ToList()
或{{ 1}})。