我有一个名为Holdings的自定义类型列表。我试图根据Holdings对象的一个属性查询列表,以返回一个新的Holdings列表。下面的LINQ查询确实可以正常工作,但我想将var unitHld替换为List unitHld,但无法使代码生效。
var unitHld = from hld in _holdingList
where hld.FundCode == lookThroList[i].FundCode
select new Holding() { Currency = hld.Currency,
FundCode = lookThroList[i].FundCode,
IdSedol = hld.IdSedol,
Nominal = hld.Nominal * unitWgt,
Price = hld.Price };
然后稍微更改这个新列表,然后再添加回原始列表(我知道逻辑听起来很奇怪,但请接受这是必须如何完成)。但是因为unitHld是var,所以下面的行不起作用。
_holdingList.Add(unitHld);
答案 0 :(得分:2)
以下调用只添加一个项目(其中项目必须与列表元素的类型相同):
_holdingList.Add(unitHld);
但是你想要添加一系列项目,所以这样做:
_holdingList.AddRange(unitHld);
其中unitHld
为IEnumerable<T>
,T为列表元素的类型。
(这个答案假定holdingList
的类型为List<T>
,而T实际上是Holding
的例子。)
有关详细信息,请参阅List.AddRange()
。
答案 1 :(得分:1)
C#是静态类型的。
var
不是一种类型,它只是在您输入IEnumerable<Holding>
的情况下的快捷方式。
如果您希望结果为List<Holding>
,那么您需要做的就是将查询括在括号中并将.ToList()
放在最后。
但是,要将此附加到另一个列表,您不需要这样做。只需在另一个列表中拨打.AddRange
即可。
或者,您可以使用Concat
var bothLists = aList.Concat(anotherList);
答案 2 :(得分:1)
我想将
var unitHld
替换为List unitHld
,但无法使代码生效。
您需要在查询结果上调用ToList()
:
var unitHld = from hld in _holdingList
where hld.FundCode == lookThroList[i].FundCode
select new Holding() { Currency = hld.Currency,
FundCode = lookThroList[i].FundCode,
IdSedol = hld.IdSedol,
Nominal = hld.Nominal * unitWgt,
Price = hld.Price };
List<Holding> unitHldList = unitHld.ToList();
然后稍微更改此新列表,然后再将其添加回原始列表
数据在unitHldList
后,您可以根据需要进行更改。
以下行不起作用。
_holdingList.Add(unitHld);
当您将集合的内容添加到List<T>
时,请使用AddRange
方法而不是Add
:
_holdingList.AddRange(unitHldList);
答案 3 :(得分:0)
试试这个:
_holdingList.AddRange(unitHld);