2013-05-04 11 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