【问题标题】:EF Linq to Entity assign array members in class initializerEF Linq to Entity 在类初始化程序中分配数组成员
【发布时间】:2014-02-19 04:43:46
【问题描述】:

下面是一段代码sn-p,它从DB中获取所需的数据,并使用类初始化器来初始化属性成员:

 var list =
            (from spcdata_tb in _dbContext.SPCDATA_TB
             from wh_master_tb in _dbContext.WH_MASTER_TB
             where spcdata_tb.FACTORY_CODE == factoryCode
             && spcdata_tb.LINE_CODE == lineCode
             && spcdata_tb.MODEL_NO == modelNumber
             && spcdata_tb.FACTORY_CODE == wh_master_tb.WH_CODE
             && spcdata_tb.LINE_CODE == wh_master_tb.LINE_CODE
             select new SPCMeasureData() 
             { 
               operDateString = spcdata_tb.DATA_WDATE, 
               operTimeString = spcdata_tb.DATA_WTIME,
               inputTimeString = spcdata_tb.DATA_ITIME,
               modelNumString = spcdata_tb.MODEL_NO,
               DataList[0] = spcdata_tb.DATA1,
               DataList[1] = spcdata_tb.DATA2,
               DataList[2] = spcdata-tb.DATA3
             });

但是,它会引发无法找到 DataList[0] 和 DataList[1] 的编译器错误。

public class SPCMeasureData
{
    public DateTime operDateString { get; set; }
    public TimeSpan? operTimeString { get; set; }
    public TimeSpan? inputTimeString { get; set; }
    public string modelNumString { get; set; }
    public string modelNameString { get; set; }
    public string lotNumString { get; set; }
    public int dataSeqString { get; set; }
    public string factoryCodeString { get; set; }
    public string factoryNameString { get; set; }
    public string lineCodeString { get; set; }
    public string lineNameString { get; set; }
    public string cusNameString { get; set; }
    public string equipNumString { get; set; }
    public float?[] dataList = new float?[30];

    public float?[] DataList
    {
        get { return dataList; }
        set { dataList = value; }
    }
}

我怀疑虽然 DataList 的实际数组成员可以从类初始化器中初始化,但它的数组成员不能以同样的方式分配。

有没有办法克服这个问题?

【问题讨论】:

  • 我猜唯一的方法是在对象初始化器中初始化数组,如DataList= new[]{spcdata_tb.DATA1,spcdata_tb.DATA2,spcdata-tb.DATA3}。但不确定这是否也有效。

标签: c# .net asp.net-mvc linq entity-framework


【解决方案1】:

对象初始化语法只能识别对象的直接成员。所以在这种情况下,它可以识别数组属性DataList,但不能识别DataList[index]。解决方案是使用数组初始值设定项语法。当你有一个复杂的属性,一个属于另一个类的属性时,也会发生类似的事情。在这种情况下,请使用另一种对象初始值设定项语法。例如:

public class OtherClass
{
    public string Prop1 { get; set; }
}

public class MainClass
{
    public OtherClass ComplexProperty { get; set; }
    public float?[] ArrayFloatProperty { get; set; }
    public List<string> CollectionProperty { get; set; }
}

MainObject 可以这样初始化:

var mainObj = new MainClass
              {
                    ArrayFloatProperty = new float? [] {0f, 2f, 3f},
                    ComplexProperty = new OtherClass { Prop1 = "string property" },
                    CollectionProperty = new List<string> { "str1", "str2", "str3" }
              };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多