尝试像这样投射
Products1 = (IList<ProductInfo>)basicProfile.Products2.Select(ToProductInfo)
产品1是
public IList<ProductInfo> Products { get; set; }
产品2是
public IList<Product> Products { get; }
以下是我在Product2的每个元素上应用的方法
internal static ProductInfo ToProductInfo(Product product)
{
if (product == null)
{
return null;
}
return new ProductInfo
{
Id = product.Id,
EffectiveTimestamp = product.EffectiveTimestamp,
ExpiryTimestamp = product.ExpiryTimestamp
};
}
产品和ProductInfo具有相同的结构并且几乎相同
我正在抓住这个
System.InvalidCastException : Unable to cast object of type
'SelectArrayIterator`2[Domain.Product,WebApi.Contracts.ProductInfo]' to type
'System.Collections.Generic.IList`1[WebApi.Contracts.ProductInfo]'.
更不用说它甚至没有进入ToProductInfo方法
答案 0 :(得分:5)
由于linq的工作方式(延迟执行)选择,创建一个IEnumerable
您想要实现的目标可以通过添加ToList()
来完成Products1 = basicProfile.Products2.Select(ToProductInfo).ToList()
或根据您的使用情况,将Products1定义为
public IEnumerable<ProductInfo> Products { get; set; }
了解更多信息,请访问此页面 https://msdn.microsoft.com/en-us/library/bb308959.aspx以及延期查询评估部分
这允许您链接linq查询而无需多次迭代您的集合