私の問題を要約しようとします:
私の製品テーブルにはさまざまな製品があり、productPrice テーブルには各製品の価格が時間とともに変化しています。
次のようなクラスに結果を取得しようとしています:
class ProductDictionary
{
public int ProductId { get; set; }
public IDictionary<int,double> YearValues { get; set; }
}
基本的に:次のようなものが必要です:(productId, Year, Value)
Product1, Dictionary( {2000, 10} {2001, 11},{2002, 13},{2003, 14},{2004, 15}} Product2, Dictionary( {2000, 9} {2001, 11},{2002, 18},{2003, 16},{2004, 17} }
私は次のように書きましたが、それは私が望むものを与えません
var result = (from x in products
join y in yearValuesForProduct2 on x.Id equals y.ProductId
select new ProductDictionary
{
ProductId = x.Id,
YearValues = (from z in yearValuesForProduct2
where z.ProductId == x.Id
select new { Year = z.Year, Value = z.Value })
.ToDictionary(k => k.Year, k => k.Value)
}).Distinct().ToList();
これは以下を返します:
Product1, Dictionary( {2000, 10} {2001, 11},{2002, 13},{2003, 14},{2004, 15}} Product1, Dictionary( {2000, 10} {2001, 11},{2002, 13},{2003, 14},{2004, 15}} Product1, Dictionary( {2000, 10} {2001, 11},{2002, 13},{2003, 14},{2004, 15}} Product1, Dictionary( {2000, 10} {2001, 11},{2002, 13},{2003, 14},{2004, 15}} Product1, Dictionary( {2000, 10} {2001, 11},{2002, 13},{2003, 14},{2004, 15}}
つまり、結合の 2 番目の部分と同じ結果が繰り返されます。
どんな助けでも感謝します:
すべてのサンプル コード
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
}
public class ProductYearValues
{
public int ProductId { get; set; }
public int Year { get; set; }
public double Value { get; set; }
}
public class ProductDictionary
{
public int ProductId { get; set; }
public string Name { get; set; }
public IDictionary<int, double> YearValues { get; set; }
}
static void Main(string[] args)
{
var newProduct1 = new Product() { Id = 1, Name = "Product 1" };
var newProduct2 = new Product() { Id = 2, Name = "Product 2" };
var newProduct3 = new Product() { Id = 3, Name = "Product3" };
List<Product> products = new List<Product>() { newProduct1 };
List<ProductYearValues> yearValuesForProduct2 = new List<ProductYearValues>()
{
new ProductYearValues() {ProductId =newProduct2.Id, Year = 2005, Value = 20},
new ProductYearValues() {ProductId =newProduct2.Id, Year = 2006, Value = 22},
new ProductYearValues() {ProductId =newProduct2.Id, Year = 2007, Value = 22},
new ProductYearValues() {ProductId =newProduct2.Id, Year = 2009, Value = 23},
new ProductYearValues() {ProductId =newProduct2.Id, Year = 2010, Value = 24},
new ProductYearValues() {ProductId =newProduct2.Id, Year = 2011, Value = 25}
};
var result = (from x in products
join y in yearValuesForProduct2 on x.Id equals y.ProductId
select new ProductDictionary
{
ProductId = x.Id,
Name = x.Name,
YearValues = (from z in yearValuesForProduct2
where z.ProductId == x.Id
select new { Year = z.Year, Value = z.Value })
.ToDictionary(k => k.Year, k => k.Value)
}).Distinct().ToList();
}