Hãy thử chuyển đổi như thế này
Products1 = (IList)basicProfile.Products2.Select(ToProductInfo)
Sản phẩm1 là một
IList Sản phẩm công khai { được đặt;
Sản phẩm2 là một
công khai IList Sản phẩm { get }
Đây là phương pháp mình đã áp dụng trên mọi phần tử của Product2
nội bộ tĩnh ProductInfo ToProductInfo(Sản phẩm sản phẩm)
{
nếu (sản phẩm == null)
{
return null;
}
trả lại Thông tin sản phẩm mới
{
Id = sản phẩm.Id,
Dấu thời gian hiệu quả = sản phẩm.Dấu thời gian hiệu quả,
ExpiryTimestamp = sản phẩm.ExpiryTimestamp
};
}
Product và ProductInfo có cấu trúc giống nhau, gần như giống hệt nhau
tôi hiểu rồi
System.InvalidCastException: Không thể truyền đối tượng thuộc loại
'SelectArrayIterator`2[Domain.Product,WebApi.Contracts.ProductInfo]' để gõ
'System.Collections.Generic.IList`1[WebApi.Contracts.ProductInfo]'.
Và nó thậm chí còn không được đưa vào phương thức ToProductInfo
Do cách thức hoạt động của LINQ (thực thi bị trì hoãn) Chọn, tạo IEnumerable
Những gì bạn muốn đạt được có thể được thực hiện bằng cách thêm ToList()
Products1 = basicProfile.Products2.Select(ToProductInfo).ToList()
Hoặc tùy thuộc vào trường hợp sử dụng của bạn, hãy xác định Products1 là
public IEnumerable Sản phẩm { get;
Thêm thông tin, trang này https://msdn.microsoft.com/en-us/library/bb308959.aspxvà phần đánh giá truy vấn bị trì hoãn
Điều này cho phép bạn xâu chuỗi các truy vấn linq mà không cần lặp lại bộ sưu tập của mình nhiều lần
Tôi là một lập trình viên xuất sắc, rất giỏi!