0

使用 linq 从 xml 文档创建可观察的对象集合时,是否需要担心任何陷阱?我似乎在这样做时遇到了麻烦,我不确定为什么会这样。以下代码告诉我,我不匹配 PatientModel 和 Patient 模型的 Observable 集合。但我不知道一定是这样。我在这里错过了什么吗?我以为我钻到了正确的层。诚然,我的 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 中选择一个列表?

4

1 回答 1

0

我在这里遇到了几个问题。
首先我需要确保我没有混淆查询语法和扩展方法语法 在此处输入链接描述

尽管在上面的示例中我没有这样做,但出于解决问题的热情,我最终还是这样做了。另外,我的选择语句末尾有一个逗号。
无论如何,最后,我做到了......

        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
             });   
于 2013-06-17T20:33:59.130 回答