使用linq to XML创建可观察集合

时间:2013-06-17 19:44:19

标签: linq-to-xml

使用linq从xml文档创建可观察的对象集合时,是否需要担心任何陷阱?我这样做似乎遇到了麻烦,我不确定为什么会这样。以下代码告诉我,我与PatientModel和Observable Patient模型集合不匹配。但我不知道必然如此。我在这里错过了什么吗?我以为我钻到了正确的层。不可否认,我的linq技能离开了muc.h是不可取的。我对你的帮助充满信心,我可以把它放在球门线上,可以这么说

        patsModel = (ObservableCollection<PatientModel>)
            from templatesList in xDocument.Descendants("TemplateData")
                select new ObservableCollection<PatientModel> {(
                    from template in templatesList.Elements("ACOData")                        
                    select new PatientModel {
                        EncounterId = ValueOrMin(Convert.ToInt32(template.Element("FOCUSED_READMISSIONS_ID").Value)),
                        PatientId = ValueOrMin(Convert.ToInt32(template.Element("PATIENT_ID").Value)), 
                        EMPIID = template.Element("EMPI").Value, 
                        PopulationPatientID = ValueOrMin(Convert.ToInt32(template.Element("POPULATION_PATIENT_ID").Value)), 
                        FirstName = template.Element("FIRST_NAME").Value, 
                        LastName = template.Element("LAST_NAME").Value,                            
                        Active = template.Element("ACTIVE").Value, 
                    })
                };

当我添加.ToList()

到第二行到最后一行...... 我得到以下异常......

Error   19  Argument 1: cannot convert from 'System.Collections.Generic.List<FRACOApplication.Models.PatientModel>' to 'FRACOApplication.Models.PatientModel'   

告诉我,我在某处不匹配。它期待一个PatientModel列表,它只获得一个PatientModel。不知道我在那里做错了什么。如何从xml中选择一个列表?

1 个答案:

答案 0 :(得分:0)

我在这里遇到了一些问题 首先,我需要确保我没有混淆查询语法和扩展方法语法 enter link description here

虽然在上面的例子中我并没有这样做,但是为了解决我的问题,我最终做到了这一点。另外,我在选择陈述的末尾有一个逗号 无论如何,最后,我做到了......

        patsModel = (ObservableCollection<PatientModel>)
            //from templateData in 
              xDocument.Element("TemplateData").Elements("ACOData")
             .Select( template => new PatientModel {
                        EncounterId = ValueOrMin(Convert.ToInt32(template.Element("FOCUSED_READMISSIONS_ID").Value)),
                        PatientId = ValueOrMin(Convert.ToInt32(template.Element("PATIENT_ID").Value)), 
                        EMPIID = template.Element("EMPI").Value, 
                        PopulationPatientID = ValueOrMin(Convert.ToInt32(template.Element("POPULATION_PATIENT_ID").Value)), 
                        FirstName = template.Element("FIRST_NAME").Value, 
                        LastName = template.Element("LAST_NAME").Value,                             
                        Active = template.Element("ACTIVE").Value
             });