通过索引访问实体数组

本文关键字:实体 数组 访问 索引 | 更新日期: 2023-09-27 18:12:01

我有一个表示矩阵的表:

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选择字符串,我可以使用变量来表示列名。

数据库也处于设计阶段,因此表(s)可以以任何需要的方式重新制作,我正在努力让我的头围绕哪一种方式来处理这个问题。

通过索引访问实体数组

您的实体CustDiscountGroups具有属性CustType, DiscountGroup1, DiscountGroup2, DiscountGroup3和您的查询返回CustDiscountGroups数组,因此您不能像[0,1]一样访问,没有2D数组

如果您需要访问第一项,您可以将其作为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]

请注意:我还没有编译和测试上面的代码,请得到的想法和改变,因为你想