C# EF Linq在类初始值设定项中为实体分配数组成员
以下是从DB获取所需数据并使用类初始值设定项初始化属性成员的代码段:C# EF Linq在类初始值设定项中为实体分配数组成员,c#,.net,asp.net-mvc,linq,entity-framework,C#,.net,Asp.net Mvc,Linq,Entity Framework,以下是从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_t
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
});
但是,它抛出了一个编译器错误,即找不到数据列表[0]和数据列表[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
,但不能识别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; }
}
我猜唯一的方法是在对象初始值设定项中初始化数组,如
DataList=new[]{spcdata\u tb.DATA1、spcdata\u tb.DATA2、spcdata tb.DATA3}
。但也不确定这是否有效。
var mainObj = new MainClass
{
ArrayFloatProperty = new float? [] {0f, 2f, 3f},
ComplexProperty = new OtherClass { Prop1 = "string property" },
CollectionProperty = new List<string> { "str1", "str2", "str3" }
};