【问题标题】:Access entity array by index c#通过索引c#访问实体数组
【发布时间】:2013-05-04 10:54:45
【问题描述】:

我有一个代表矩阵的表格:

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

数据库也处于设计阶段,因此可以以任何需要的方式重新制作表,我正在努力思考解决问题的方法。

【问题讨论】:

  • 尝试 [0][1] 而不是 [0,1]
  • @alex 谢谢,但没用。 “无法将带有 [] 的索引应用于 'EwhData.CustDiscountGroup' 类型的表达式”

标签: c# linq-to-entities entity-framework-4.1


【解决方案1】:

您的实体CustDiscountGroups 具有属性CustType, DiscountGroup1, DiscountGroup2, DiscountGroup3 并且您的查询返回数组CustDiscountGroups,因此您无法像[0,1] 那样访问没有二维数组

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

请注意:以上代码我没有编译和测试过,请大家理解并随意修改

【讨论】:

  • 感谢@Damith,它给了我一个“LINQ to Entities 无法识别方法 'System.Object[] ToArray[Object](System.Collections.Generic.IEnumerable`1[System.Object] )' 方法,并且该方法不能翻译成商店表达式。” - 我需要再次阅读书籍。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-26
  • 1970-01-01
  • 1970-01-01
  • 2011-12-24
相关资源
最近更新 更多