C# 创建引用集合集合的变量

C# 创建引用集合集合的变量,c#,.net,collections,C#,.net,Collections,我有这个校准模型: public class Calibration : IAnalyticsSection { public int Id { get; set; } public ICollection<Symptoms> Symptoms { get; set; } = new List<Symptoms>(); } 在绘制这些图时,我能够使用校准。症状如以下示例所示: var symptomData = calibration.Symptoms

我有这个校准模型:

public class Calibration : IAnalyticsSection
{
    public int Id { get; set; }

    public ICollection<Symptoms> Symptoms { get; set; } = new List<Symptoms>();
}
在绘制这些图时,我能够使用
校准。症状
如以下示例所示:

var symptomData = calibration.Symptoms;  // Gets actual symptoms: returns a list

if (symptomData.Count == 0)
{
    Symptoms symptom = new Symptoms
    {
        SymptomSeverity = int.Parse(values["symptomSeverity"].ToString()),
    };
    symptom.CalibrationId = calibration.Id;
    calibration.Symptoms.Add(symptom);
}
这是因为
校准
属于
校准
类型。然而,我不会做类似于
var-symplesqsdata=sympledata.symplesqs因为
symptomData
属于
ICollection
类型。我尝试了
var-SymptomsQsData=(Symptoms)symptomData.SymptomsQs但它的模式没有区别

我想我需要做的是创建一个引用集合中集合的变量。有可能吗?如果有,是如何做到的

我想做的是: 我的校准实体包含映射到症状实体的症状集合。Symptoms实体包含映射到SymptomsQs实体的SymptomsQs集合。还有更多的内容,因为我将覆盖校准/症状/症状SQ(如果存在),并添加它们(如果不存在)。我只是不想粘贴一堆可怕的代码。我从字典中获取数据,并将其映射到每个实体中的相关字段。我可以通过以下方式获得校准件:

public Calibration CalibrationData(Calibration calibration,  Dictionary<string, object> values)
        {
            calibration.TestType = bool.Parse(values["testType"].ToString());
            calibration.PlayerHeight = decimal.Parse(values["playerHeight"].ToString());
            calibration.ArmSpan = decimal.Parse(values["armSpan"].ToString());
...
我的问题是现在对SQS部分执行相同的操作。我不知道我是怎么做的

对于混乱的代码和糟糕的实体命名等表示歉意。简而言之,我正在尝试重构此(不是我的代码),因此应处理命名等问题:

public class CalibrationClass
{
    public Calibration CalibrationData(Calibration calibration, ref Symptoms symptoms, Dictionary<string, object> values, JObject o)
    {
        calibration.TestType = bool.Parse(values["testType"].ToString());
        calibration.PlayerHeight = decimal.Parse(values["playerHeight"].ToString());
        calibration.ArmSpan = decimal.Parse(values["armSpan"].ToString());
        calibration.RightHanded = bool.Parse(values["rightHanded"].ToString());
        calibration.RightFooted = bool.Parse(values["rightFooted"].ToString());

        var CalibratedHeadPositionValues = JsonConvert.DeserializeObject<Dictionary<string, string>>(values["calibratedHeadPosition"].ToString());
        var LeftHandPositionTPoseValues = JsonConvert.DeserializeObject<Dictionary<string, string>>(values["leftHandPositionTPose"].ToString());
        var RightHandPositionTPoseValues = JsonConvert.DeserializeObject<Dictionary<string, string>>(values["rightHandPositionTPose"].ToString());
        var LeftHandSpherePosValues = JsonConvert.DeserializeObject<Dictionary<string, string>>(values["leftHandSpherePos"].ToString());
        var RightHandSpherePosValues = JsonConvert.DeserializeObject<Dictionary<string, string>>(values["rightHandSpherePos"].ToString());
        
        calibration.CalibratedHeadPositionX = decimal.Parse(CalibratedHeadPositionValues["x"]);
        calibration.CalibratedHeadPositionY = decimal.Parse(CalibratedHeadPositionValues["y"]);
        calibration.CalibratedHeadPositionZ = decimal.Parse(CalibratedHeadPositionValues["z"]);
        calibration.LeftHandPositionTPoseX = decimal.Parse(LeftHandPositionTPoseValues["x"]);
        calibration.LeftHandPositionTPoseY = decimal.Parse(LeftHandPositionTPoseValues["y"]);
        calibration.LeftHandPositionTPoseZ = decimal.Parse(LeftHandPositionTPoseValues["z"]);
        calibration.RightHandPositionTPoseX = decimal.Parse(RightHandPositionTPoseValues["x"]);
        calibration.RightHandPositionTPoseY = decimal.Parse(RightHandPositionTPoseValues["y"]);
        calibration.RightHandPositionTPoseZ = decimal.Parse(RightHandPositionTPoseValues["z"]);
        calibration.LeftHandSpherePosX = decimal.Parse(LeftHandSpherePosValues["x"]);
        calibration.LeftHandSpherePosY = decimal.Parse(LeftHandSpherePosValues["y"]);
        calibration.LeftHandSpherePosZ = decimal.Parse(LeftHandSpherePosValues["z"]);
        calibration.RightHandSpherePosX = decimal.Parse(RightHandSpherePosValues["x"]);
        calibration.RightHandSpherePosY = decimal.Parse(RightHandSpherePosValues["y"]);
        calibration.RightHandSpherePosZ = decimal.Parse(RightHandSpherePosValues["z"]);

        if (calibration.TestType == false)
        {
            return calibration;
        }
        else
        {
            //Parse Symptoms Table
            var symptomData = calibration.Symptoms;
            if (symptomData.Count == 0)
            {
                Symptoms symptom = new Symptoms
                {
                    SymptomSeverity = int.Parse(values["symptomSeverity"].ToString()),
                };
                symptom.CalibrationId = calibration.Id;
                calibration.Symptoms.Add(symptom);
            }
            else
            {
                foreach (var symptom in symptomData)
                {
                    symptom.SymptomSeverity = int.Parse(values["symptomSeverity"].ToString());
                }                    
            }

           
            //Parse Scat5 Question Table
            var scat5SymptomsData = symptoms.Scat5SymptomsQs;
            JArray scat5SymptomsQsItems = (JArray)o["scat5SymptomsQs"];

            if (scat5SymptomsData.Count == 0)
            {
                if (scat5SymptomsQsItems.Count == 0)
                {
                    for (int i = 1; i < 23; i++)
                    {
                        Scat5SymptomsQs scat5SymptomsQs = new Scat5SymptomsQs
                        {
                            SymptomsId = symptoms.Id,
                            Question = i,
                            Answer = -11,
                        };
                        symptoms.Scat5SymptomsQs.Add(scat5SymptomsQs);
                    }
                }
                else
                {
                    for (int i = 0; i < scat5SymptomsQsItems.Count; i++)
                    {
                        Scat5SymptomsQs scat5SymptomsQs = new Scat5SymptomsQs
                        {
                            SymptomsId = symptoms.Id,
                            Question = i + 1,
                            Answer = (int)o["scat5SymptomsQs"][i],
                        };
                        symptoms.Scat5SymptomsQs.Add(scat5SymptomsQs);
                    }
                }
            }
            else
            {
                var count = 0;
                foreach (var question in scat5SymptomsData)

                {
                    question.Question = count + 1;
                    question.Answer = (int)o["scat5SymptomsQs"][count];
                }

            }

            
            return calibration;

        }
    }

}
公共类校准类
{
公共校准数据(校准、参考症状、字典值、JObject o)
{
calibration.TestType=bool.Parse(值[“TestType”].ToString());
calibration.PlayerHeight=decimal.Parse(值[“PlayerHeight”].ToString());
calibration.ArmSpan=decimal.Parse(值[“ArmSpan”].ToString());
calibration.RightHanded=bool.Parse(值[“RightHanded”].ToString());
calibration.RightFooted=bool.Parse(值[“RightFooted”].ToString());
var calibredHeadPositionValues=JsonConvert.DeserializeObject(值[“calibredHeadPosition”].ToString());
var LeftHandPositionTPoseValues=JsonConvert.DeserializeObject(值[“leftHandPositionTPose”].ToString());
var RightHandPositionTPoseValues=JsonConvert.DeserializeObject(值[“rightHandPositionTPose”].ToString());
var LeftHandSpherePosValues=JsonConvert.DeserializeObject(值[“leftHandSpherePos”].ToString());
var RightHandSpherePosValues=JsonConvert.DeserializeObject(值[“rightHandSpherePos”].ToString());
calibration.CalibledHeadPositionX=十进制.Parse(CalibledHeadPositionValues[“x”]);
calibration.CalibledHeadPositionY=decimal.Parse(CalibledHeadPositionValues[“y”]);
calibration.CalibledHeadPositionz=十进制.Parse(CalibledHeadPositionValues[“z”]);
calibration.LeftHandPositionTPoseX=decimal.Parse(LeftHandPositionTPoseValues[“x”]);
calibration.LeftHandPositionPosey=decimal.Parse(LeftHandPositionPoseValues[“y”]);
calibration.LeftHandPositionTPoseZ=decimal.Parse(LeftHandPositionTPoseValues[“z”]);
calibration.RightHandPositionTPoseX=decimal.Parse(RightHandPositionTPoseValues[“x”]);
calibration.RightHandPositionPosey=decimal.Parse(RightHandPositionPoseValues[“y”]);
calibration.RightHandPositionTPoseZ=decimal.Parse(RightHandPositionTPoseValues[“z”]);
calibration.LeftHandSpherePosX=decimal.Parse(leftHandsphereposvalue[“x”]);
calibration.LeftHandSpherePosY=decimal.Parse(LeftHandSpherePosValues[“y”]);
calibration.LeftHandSpherePosZ=decimal.Parse(LeftHandSpherePosValues[“z”]);
calibration.RightHandSpherePosX=decimal.Parse(rightHandsphereposvalue[“x”]);
calibration.RightHandSpherePosY=decimal.Parse(RightHandSpherePosValues[“y”]);
calibration.RightHandSpherePosZ=decimal.Parse(RightHandSpherePosValues[“z”]);
如果(calibration.TestType==false)
{
返回校准;
}
其他的
{
//解析症状表
var症状数据=校准。症状;
如果(SympleData.Count==0)
{
症状=新症状
{
SympleSeverity=int.Parse(值[“SympleSeverity”].ToString()),
};
症状.CalibrationId=校准.Id;
校准。症状。添加(症状);
}
其他的
{
foreach(症状数据中的var症状)
{
symptom.SymptomSeverity=int.Parse(值[“SymptomSeverity”].ToString());
}                    
}
//解析Scat5问题表
var SCAT5SYMBOLSDATA=症状。SCAT5SYMBOLSQS;
JArray SCAT5SYMBOLSQSITEMS=(JArray)o[“SCAT5SYMBOLSQS”];
如果(scat5sdata.Count==0)
{
if(scat5sqsitems.Count==0)
{
对于(int i=1;i<23;i++)
{
SCAT5症状SQS SCAT5症状SQS=新SCAT5症状SQS
{
SymptomsId=symptoms.Id,
问题=我,
答案=-11,
};
症状。SCAT5SYMBOLSQS。添加(SCAT5SYMBOLSQS);
}
}
其他的
{
对于(int i=0;ipublic Calibration CalibrationData(Calibration calibration,  Dictionary<string, object> values)
        {
            calibration.TestType = bool.Parse(values["testType"].ToString());
            calibration.PlayerHeight = decimal.Parse(values["playerHeight"].ToString());
            calibration.ArmSpan = decimal.Parse(values["armSpan"].ToString());
...
var symptomData = calibration.Symptoms;  // Gets actual symptoms: returns a list

if (symptomData.Count == 0)
{
    Symptoms symptom = new Symptoms
    {
        SymptomSeverity = int.Parse(values["symptomSeverity"].ToString()),
    };
    symptom.CalibrationId = calibration.Id;
    calibration.Symptoms.Add(symptom);
}
else
{
    foreach (var symptom in symptomData)
    {
        symptom.SymptomSeverity = int.Parse(values["symptomSeverity"].ToString());
    }
}
public class CalibrationClass
{
    public Calibration CalibrationData(Calibration calibration, ref Symptoms symptoms, Dictionary<string, object> values, JObject o)
    {
        calibration.TestType = bool.Parse(values["testType"].ToString());
        calibration.PlayerHeight = decimal.Parse(values["playerHeight"].ToString());
        calibration.ArmSpan = decimal.Parse(values["armSpan"].ToString());
        calibration.RightHanded = bool.Parse(values["rightHanded"].ToString());
        calibration.RightFooted = bool.Parse(values["rightFooted"].ToString());

        var CalibratedHeadPositionValues = JsonConvert.DeserializeObject<Dictionary<string, string>>(values["calibratedHeadPosition"].ToString());
        var LeftHandPositionTPoseValues = JsonConvert.DeserializeObject<Dictionary<string, string>>(values["leftHandPositionTPose"].ToString());
        var RightHandPositionTPoseValues = JsonConvert.DeserializeObject<Dictionary<string, string>>(values["rightHandPositionTPose"].ToString());
        var LeftHandSpherePosValues = JsonConvert.DeserializeObject<Dictionary<string, string>>(values["leftHandSpherePos"].ToString());
        var RightHandSpherePosValues = JsonConvert.DeserializeObject<Dictionary<string, string>>(values["rightHandSpherePos"].ToString());
        
        calibration.CalibratedHeadPositionX = decimal.Parse(CalibratedHeadPositionValues["x"]);
        calibration.CalibratedHeadPositionY = decimal.Parse(CalibratedHeadPositionValues["y"]);
        calibration.CalibratedHeadPositionZ = decimal.Parse(CalibratedHeadPositionValues["z"]);
        calibration.LeftHandPositionTPoseX = decimal.Parse(LeftHandPositionTPoseValues["x"]);
        calibration.LeftHandPositionTPoseY = decimal.Parse(LeftHandPositionTPoseValues["y"]);
        calibration.LeftHandPositionTPoseZ = decimal.Parse(LeftHandPositionTPoseValues["z"]);
        calibration.RightHandPositionTPoseX = decimal.Parse(RightHandPositionTPoseValues["x"]);
        calibration.RightHandPositionTPoseY = decimal.Parse(RightHandPositionTPoseValues["y"]);
        calibration.RightHandPositionTPoseZ = decimal.Parse(RightHandPositionTPoseValues["z"]);
        calibration.LeftHandSpherePosX = decimal.Parse(LeftHandSpherePosValues["x"]);
        calibration.LeftHandSpherePosY = decimal.Parse(LeftHandSpherePosValues["y"]);
        calibration.LeftHandSpherePosZ = decimal.Parse(LeftHandSpherePosValues["z"]);
        calibration.RightHandSpherePosX = decimal.Parse(RightHandSpherePosValues["x"]);
        calibration.RightHandSpherePosY = decimal.Parse(RightHandSpherePosValues["y"]);
        calibration.RightHandSpherePosZ = decimal.Parse(RightHandSpherePosValues["z"]);

        if (calibration.TestType == false)
        {
            return calibration;
        }
        else
        {
            //Parse Symptoms Table
            var symptomData = calibration.Symptoms;
            if (symptomData.Count == 0)
            {
                Symptoms symptom = new Symptoms
                {
                    SymptomSeverity = int.Parse(values["symptomSeverity"].ToString()),
                };
                symptom.CalibrationId = calibration.Id;
                calibration.Symptoms.Add(symptom);
            }
            else
            {
                foreach (var symptom in symptomData)
                {
                    symptom.SymptomSeverity = int.Parse(values["symptomSeverity"].ToString());
                }                    
            }

           
            //Parse Scat5 Question Table
            var scat5SymptomsData = symptoms.Scat5SymptomsQs;
            JArray scat5SymptomsQsItems = (JArray)o["scat5SymptomsQs"];

            if (scat5SymptomsData.Count == 0)
            {
                if (scat5SymptomsQsItems.Count == 0)
                {
                    for (int i = 1; i < 23; i++)
                    {
                        Scat5SymptomsQs scat5SymptomsQs = new Scat5SymptomsQs
                        {
                            SymptomsId = symptoms.Id,
                            Question = i,
                            Answer = -11,
                        };
                        symptoms.Scat5SymptomsQs.Add(scat5SymptomsQs);
                    }
                }
                else
                {
                    for (int i = 0; i < scat5SymptomsQsItems.Count; i++)
                    {
                        Scat5SymptomsQs scat5SymptomsQs = new Scat5SymptomsQs
                        {
                            SymptomsId = symptoms.Id,
                            Question = i + 1,
                            Answer = (int)o["scat5SymptomsQs"][i],
                        };
                        symptoms.Scat5SymptomsQs.Add(scat5SymptomsQs);
                    }
                }
            }
            else
            {
                var count = 0;
                foreach (var question in scat5SymptomsData)

                {
                    question.Question = count + 1;
                    question.Answer = (int)o["scat5SymptomsQs"][count];
                }

            }

            
            return calibration;

        }
    }

}