Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ到XML、ORM或其他什么;完全不同;?_C#_Linq_Silverlight_Orm - Fatal编程技术网

C# LINQ到XML、ORM或其他什么;完全不同;?

C# LINQ到XML、ORM或其他什么;完全不同;?,c#,linq,silverlight,orm,C#,Linq,Silverlight,Orm,我正在进行一个Silverlight项目,其中包含了所有的特性和限制。这是对以前产品的更新。为了快速上市,其目的是尽可能多地维护后端(Web服务、数据库等)。我们的任务是只有在没有其他方法的情况下才接触后端。我们将主要集中于重新编写前端。不久将有一个重要的行业会议,我们将在会上演示产品的早期外观。在正式发布之前可能会有时间进行一些重新工作,但后端可能需要等到V2 好的,所以我要做的是对我负责的前端使用带有数据绑定的MVVM模式(MVVM模式由上面指定)。我有一个预先存在的web服务,它提供一些X

我正在进行一个Silverlight项目,其中包含了所有的特性和限制。这是对以前产品的更新。为了快速上市,其目的是尽可能多地维护后端(Web服务、数据库等)。我们的任务是只有在没有其他方法的情况下才接触后端。我们将主要集中于重新编写前端。不久将有一个重要的行业会议,我们将在会上演示产品的早期外观。在正式发布之前可能会有时间进行一些重新工作,但后端可能需要等到V2

好的,所以我要做的是对我负责的前端使用带有数据绑定的MVVM模式(MVVM模式由上面指定)。我有一个预先存在的web服务,它提供一些XML。该XML的示例如下所示:

<CODEBOOKINDEX>
    <ME Words="1" Score="25" Highscore="1">Main Entry Item
        <NM>attack</NM>
        <NM>cardiac</NM>
        <NM>chest</NM>
        <NM>effort</NM>
        <NM>heart</NM>
        <NM>pectoris</NM>
        <NM>syndrome</NM>
        <NM>vasomotor</NM>
        <IE>413.9</IE>

        <M1 Words="1" Score="25">An M1 Item (Same as ME, just first level Child)
            <IE>557.1</IE>
        </M1>

        <M1 Words="1" Score="25">Another M1 Item
        <IE>443.9</IE>
            <M2 Words="1" Score="25">An M2 Item (again same as ME, just a child of an M1 item)
                <CF>Arteriosclerosis,extremities</CF>
                <IE>440.20</IE>
            </M2>
        </M1>
    </ME></CODEBOOKINDEX>

主要条目
攻击
心脏的
胸部
努力
心
胸肌
综合征
血管舒缩
413.9
M1项(与我相同,仅为一级子项)
557.1
另一个M1项目
443.9
M2项目(与我相同,只是M1项目的子项目)
四肢动脉硬化
440.20
所以,我的问题是,因为我想使用MVVM模式将其绑定到UI,所以在我看来,我需要将其转换为自定义对象。正如您可以看到的,有许多“条目”项,MainEntry(ME)和子条目(在本例中为M1或M2),它们都将包含某些其他节点(例如,它们都将有一个IE节点),它们可能包含0个或多个其他节点类型(例如,它们可能包含或不包含一个或多个NM节点,或者它们可能包含或不包含一个CF节点)。这意味着(至少对我来说)我不能直接绑定到XML,因为:

  • 它违反了MVVM模式(我可能会在演示中证明这一点,但以后必须重构)
  • 我无法将UI元素绑定到给定项可能不存在的XML节点
  • 在某些情况下,我必须将一个集合(例如一堆NM项)转换为一个格式化的strig,以便于显示,我认为这不是一件小事
  • 因此,我试图理解将此XML转换为可绑定对象的最佳方法,在我看来,这意味着将此XML转换为模型的对象,然后在该模型上覆盖视图模型

    使用LINQ到XML查询可以很容易地做到这一点,还是我真的进入了ORM领域,如NHibernate或实体框架(请不要讨论哪个ORM)?
    我刚刚确定了我将在UI中使用哪些控件,我需要尽快向我的经理演示我将如何处理翻译

    因此,真正的问题是:

  • 我是否需要一个ORM?我并不反对使用它们,但我希望XAP文件的大小保持较小,并希望限制我(和我的队友)在一次传递中需要学习的新技术的数量
  • 如果我真的需要一个,我可以保持文件大小较小,我可以用EF或NHibernatge快速升级,并有一个模型显示很快吗?我在这里讲了一周的时间,希望有一个东西,它将从Web服务获取输出并将其转化为一个对象,即使最初地图并不完美,我也需要展示一些进展
  • 是否还有另外一个我没有考虑的选项,可以更容易地限制修改现有代码(即Web服务)和产品可用结果的需要
  • 我需要ORM吗

    不可以。您没有映射到关系源,因此对象关系映射器没有帮助


    把它做完


    谢谢你,大卫。这有助于我了解LINQtoXML将如何完成这项任务,这意味着我仍然需要加快进度,但它似乎具备了我所需要的功能,因此我将花有限的时间朝着这个方向前进。
    public CustomClass TranslateME(XElement source)
    {
      CustomClass result = new CustomClass();
      result.Words = (int) source.Attribute("Words");
      result.Score = (int) source.Attribute("Score");
    
      XAttribute highScore = source.Attribute("HighScore");
      result.HighScore = (highScore == null) ? 0 : (int) highScore;
    
      result.NMs = source
        .Elements("NM")
        .Select(x => x.Value)
        .ToList();
    
      result.IE = source
        .Element("IE").Value;
    
      result.SubEntries = source
        .Elements("M1")
        .Select(x => TranslateM1(x))
        .ToList();
    
      return result;
    }