代码之家  ›  专栏  ›  技术社区  ›  Sasha

LINQ与XML一起使用

  •  2
  • Sasha  · 技术社区  · 15 年前

    我们有一个使用LINQ访问DB层(MS SQL)的项目。我们现在能把数据库层改成 XML文件 还是用同样的LINQ访问它?

    我们希望增加在单个XML文件或一组XML文件中存储数据的可能性。

    当前的LINQ to SQL代码如下:

    result = (from e in db.Organizations
              where e.Id == idOrganization
              select e).SingleOrDefault();
    

     result = (from e in db.Organizations
               where e.Name.Trim().ToUpper() == organizationName.Trim().ToUpper()
                   && e.Id!=idCurrentOrganization
               select e).Count()>0;
    
    2 回复  |  直到 15 年前
        1
  •  2
  •   CoderDennis    15 年前

    linq to sql和linq to xml有相似之处,但它们并不相同。可以编写LINQ查询,以便以相同的方式使用它们,但查询本身的代码可能需要更改。

    您能举例说明一下您当前的linq-to-sql代码是什么样子的吗?包括您正在使用的数据类型以及您希望如何格式化XML的示例可能会帮助这里的人们给出更具体的指针。

    编辑: 第一个查询似乎返回一个对象。如果您的linq-to-sql和linq-to-xml都返回相同的类型,那么您可以交换它们而不更改使用结果的代码。

    第二个查询似乎返回一个bool,所以同样的概念也适用于该查询。解决方案中其他地方的代码不关心bool是如何设置的。

    Mike的建议是为数据访问层使用接口。对于您的两个示例,您将拥有一个包含组织对象和bool的接口。您的SQL和XML实现是不同的,但代码的其他每个部分只需要知道如何使用接口。

        2
  •  1
  •   Mike Gleason jr Couturier    15 年前

    您还需要做一个额外的步骤:在能够查询数据之前,您必须将XML加载到一个xdocument(或者xnode,如果我能正确调用的话)。

    之后,只需使用linq-to-xml语法选择树中的节点。

    不幸的是,没有LINQ语法可以让您同时查询和透明地插入XML或DB。

    注意XML名称空间在选择节点的时候,可能会让人头疼!

    PS2。对不起,我手边没有密码

    PS3。我建议您的数据库层从接口派生,这样您将 能够从XML切换到DB,反之亦然

    希望这有帮助