2013-05-04 29 views
0

我有表示矩陣的表:接入實體陣列

CustType DiscountGroup1 DiscountGroup2 DiscountGroup3 
Wholesale  32   10    15 
Retail   10   15    0 

所有我的庫存物品具有相應的折扣組代碼1,2或3。

在發票的時間我想查找客戶類型在正在開具發票的項目上獲得的折扣。

表需要能夠成長爲包括新的客戶類型和新的折扣組,以便沒有什麼可以硬編碼。

我想我會拉數據到一個數組,所以我可以選擇按索引列,但我收到我的實體難倒太聰明......

var disc = (from d in context.CustDiscountGroups 
        where d.CustType == Wholesale 
        select d).ToArray(); 

我只能通過接入列名稱即:disc[0].DiscountGroup1

如果我嘗試disc[0,1]我收到一個錯誤,指出錯誤的索引數內。

我錯過了什麼?我覺得這是可笑的根本。我唯一的其他想法被命名列,1,2,3等,並建立一個SQL SELECT字符串,在那裏我可以用一個變量設置爲列名。

數據庫處於設計階段以及使桌可以在任何需要的方式重拍,我努力讓我的頭裹着哪種方式來解決這個問題。

+1

嘗試[0] [1]而不是[0,1] – alex 2013-05-04 10:57:08

+0

@alex謝謝,但沒有奏效。 「無法適用與[]的索引類型爲‘EwhData.CustDiscountGroup’的表現」 – Victoria 2013-05-04 16:00:05

回答

0

你的實體有性能CustType, DiscountGroup1, DiscountGroup2, DiscountGroup3CustDiscountGroups[0,1]所以你不能訪問你的查詢返回的數組有沒有二維數組CustDiscountGroups

,如果你需要訪問你可以得到它作爲disc[0]第一個項目,那麼你可以得到任何屬性折扣組的屬性。像

disc[0].CustType, disc[0].DiscountGroup1, disc[0].DiscountGroup2, disc[0].DiscountGroup3

如果你想獲得數組的數組,然後獲得使用反射屬性值,如下

var disc = context.CustDiscountGroups.Where(c=>c.CustType == Wholesale) 
      .Select(v=>typeof(CustDiscountGroups) 
         .GetFields(System.Reflection.BindingFlags.Public) 
          .Select(f=>f.GetValue(v)).ToArray()) 
       .ToArray(); 

var disc = context.CustDiscountGroups.Where(c=>c.CustType == Wholesale) 
      .Select(v=>typeof(CustDiscountGroups) 
         .GetProperties() 
          .Select(f=>f.GetValue(v,null)).ToArray()).ToArray(); 

現在你可以訪問諸如disc[0][1]

請注意值:我的避風港「T編譯和上面的代碼進行測試,請明白我的意思,當你想改變

+0

感謝@Damith,它給了我一個「LINQ到實體無法識別方法「System.Object的[] ToArray的[對象](System.Collections中.Generic.IEnumerable'1 [System.Object的])」方法,和這種方法不能被翻譯成存儲表述「。 - 我需要再次打開書。 – Victoria 2013-05-04 16:18:10