找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1995|回复: 6

[分享] LinqToXml的Join语句

[复制链接]
发表于 2014-8-12 11:37:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 雪山飞狐(lzh) 于 2014-8-12 11:42 编辑

Linq语句有点复杂了 留档 呵呵
MethodTable的Id,返回MethodShipTable的Name列分组

        public IEnumerable<IGrouping<string, string>> GetMethodNameGroups(int index)
        {
            return
                from m in GetMethods()
                join ms in GetMethodShips()
                on m.Element("Id").Value equals ms.Element("MId").Value
                group ms.Element("Name").Value by m.Element("Name").Value;
        }

Xml文件, 改下扩展名
请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:XConfig.txt 
下载次数:2  文件大小:2.86 KB 
下载权限: 不限 以上  [免费赚D豆]


  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Xml.Linq;
  5. using System.Text;

  6. namespace TxDwgViewer
  7. {
  8.     class XmlDatabase
  9.     {

  10.         const string strConfigFileName = "XConfig.xml";

  11.         const string strClassTableName = "Classes";
  12.         const string strMethodTableName = "Methodes";
  13.         const string strCourseTableName = "Courses";
  14.         const string strMethodShipTableName = "MethodShips";

  15.         private XElement _root;
  16.         private XElement _infos;

  17.         public XmlDatabase()
  18.         {
  19.             _root = XElement.Load(Helper.GetDataFilePath(strConfigFileName));
  20.         }

  21.         public void Save()
  22.         {
  23.             _root.Save(Helper.GetDataFilePath(strConfigFileName));
  24.         }

  25.         public IEnumerable<XElement> GetClasses()
  26.         {
  27.             return _root.Elements(strClassTableName);
  28.         }

  29.         public IEnumerable<XElement> GetMethods()
  30.         {
  31.             return _root.Elements(strMethodTableName);
  32.         }

  33.         public IEnumerable<XElement> GetCourses()
  34.         {
  35.             return _root.Elements(strCourseTableName);
  36.         }

  37.         public int MethodCount
  38.         {
  39.             get { return GetMethods().Count(); }
  40.         }

  41.         public int CourseCount
  42.         {
  43.             get { return GetCourses().Count(); }
  44.         }

  45.         public int CourseTable
  46.         {
  47.             get { return GetCourses().Count(); }
  48.         }

  49.         public IEnumerable<XElement> GetMethodShips()
  50.         {
  51.             return _root.Elements(strMethodShipTableName);
  52.         }

  53.         public IEnumerable<string> GetMethodNames(int index)
  54.         {
  55.             return
  56.                 from m in _root.Elements(strMethodShipTableName)
  57.                 where m.Element("MId").Value == index.ToString()
  58.                 select m.Element("Name").Value;
  59.         }

  60.         public IEnumerable<IGrouping<string, string>> GetMethodNameGroups(int index)
  61.         {
  62.             return
  63.                 from m in GetMethods()
  64.                 join ms in GetMethodShips()
  65.                 on m.Element("Id").Value equals ms.Element("MId").Value
  66.                 group ms.Element("Name").Value by m.Element("Name").Value;
  67.         }

  68.     }
  69. }



论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-8-12 12:26:41 来自手机 | 显示全部楼层
昨天刚看了个Treeview和xml连接,附件是cs文档,还没有看明白
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-12 14:16:49 | 显示全部楼层
Treeview和xml连接应该是不难的 xml也有树形的,用Linq一下就对应上了
附件?

点评

来了! 出处暂时忘了  详情 回复 发表于 2014-8-13 06:10
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-12 14:24:13 | 显示全部楼层
刚做好的图库建立Treeview 我还是习惯用数据表建立。。。

  1.         public void MakeRootNode(int index, string name)
  2.         {
  3.             if (index == 0)
  4.             {
  5.                 _root = treeView1.Nodes.Add("Root", "所有项目<" + name + ">", 0);
  6.                 _root.Tag = 0;
  7.                 _roots.Add(_root);
  8.                 _dwgs = new List<DwgInfo>();
  9.                 foreach (var e in _xdb.GetClasses())
  10.                 {

  11.                     string pkey = e.Element("Key").Value;
  12.                     string pname = e.Element("Name").Value;
  13.                     var pnode = _root.Nodes.Add(pkey, pname, 1, 2);

  14.                     var lst = new DwgInfoList();
  15.                     pnode.Tag = lst;

  16.                     var sdi = Helper.GetDwgPath(pkey);
  17.                     foreach (var f in sdi.GetFiles("*.dwg"))
  18.                     {
  19.                         var dwg =
  20.                             new DwgInfo
  21.                             {
  22.                                 Id = pkey + f.Name.Substring(0, 3),
  23.                                 Path = f.FullName,
  24.                                 ClassName = pkey,
  25.                                 Database = _xdb,
  26.                             };
  27.                         _dwgs.Add(dwg);
  28.                         lst.Add(dwg);
  29.                         var fnode = pnode.Nodes.Add(dwg.Id, dwg.Id, 3, 4);
  30.                         fnode.Tag = dwg;
  31.                     }
  32.                 }
  33.             }
  34.             else
  35.             {
  36.                 int mIndex = index - 1;
  37.                 _roots[index] = treeView1.Nodes.Add("Root" + index, "所有项目<" + name + ">", 0);
  38.                 _roots[index].Tag = 0;
  39.                 foreach (var mname in _xdb.GetMethodNames(mIndex))
  40.                 {

  41.                     var mnode = _roots[index].Nodes.Add(mname, mname, 1, 2);

  42.                     var lst = new DwgInfoList();
  43.                     mnode.Tag = lst;

  44.                     foreach (var dwg in _dwgs.Where(d => d.Methods[mIndex] == mname))
  45.                     {
  46.                         var dnode = mnode.Nodes.Add(dwg.Id, dwg.Id, 3, 4);
  47.                         dnode.Tag = dwg;
  48.                         lst.Add(dwg);
  49.                     }
  50.                 }
  51.             }

  52.             treeView1.SelectedNode = _roots[index];
  53.             _mode = SelectMode.Root;

  54.         }

点评

手机加不上附件,晚上再补  详情 回复 发表于 2014-8-12 14:30
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-8-12 14:30:41 来自手机 | 显示全部楼层
雪山飞狐(lzh) 发表于 2014-8-12 14:24
刚做好的图库建立Treeview 我还是习惯用数据表建立。。。

手机加不上附件,晚上再补
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-8-13 06:10:10 | 显示全部楼层
雪山飞狐(lzh) 发表于 2014-8-12 14:16
Treeview和xml连接应该是不难的 xml也有树形的,用Linq一下就对应上了
附件?

来了! 出处暂时忘了

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Windows.Forms;
  5. using System.Xml;


  6. namespace TreeExXML
  7. {
  8.     class TreeExXMLCls
  9.     {
  10.         private TreeView thetreeview;
  11.         private string xmlfilepath;
  12.         XmlTextWriter textWriter;
  13.         XmlNode Xmlroot;
  14.         XmlDocument textdoc;

  15.         public TreeExXMLCls()
  16.         {
  17.             //----构造函数
  18.             textdoc = new XmlDocument();

  19.         }

  20.         ~TreeExXMLCls()
  21.         {
  22.             //----析构函数

  23.         }

  24.         #region 遍历treeview并实现向XML的转化
  25.         /// <summary>   
  26.         /// 遍历treeview并实现向XML的转化
  27.         /// </summary>   
  28.         /// <param name="TheTreeView">树控件对象</param>   
  29.         /// <param name="XMLFilePath">XML输出路径</param>   
  30.         /// <returns>0表示函数顺利执行</returns>   

  31.         public int TreeToXML(TreeView TheTreeView, string XMLFilePath)
  32.         {
  33.             //-------初始化转换环境变量
  34.             thetreeview = TheTreeView;
  35.             xmlfilepath = XMLFilePath;
  36.             textWriter = new XmlTextWriter(xmlfilepath, null);

  37.             //-------创建XML写操作对象
  38.             textWriter.Formatting = Formatting.Indented;

  39.             //-------开始写过程,调用WriteStartDocument方法
  40.             textWriter.WriteStartDocument();

  41.             //-------写入说明
  42.             textWriter.WriteComment("this XML is created from a tree");
  43.             textWriter.WriteComment("By 思月行云");

  44.             //-------添加第一个根节点
  45.             textWriter.WriteStartElement("TreeExXMLCls");
  46.             textWriter.WriteEndElement();

  47.             //------ 写文档结束,调用WriteEndDocument方法
  48.             textWriter.WriteEndDocument();

  49.             //-----关闭输入流
  50.             textWriter.Close();

  51.             //-------创建XMLDocument对象
  52.             textdoc.Load(xmlfilepath);

  53.             //------选中根节点
  54.             XmlElement Xmlnode=textdoc.CreateElement(thetreeview.Nodes[0].Text);
  55.             Xmlroot = textdoc.SelectSingleNode("TreeExXMLCls");

  56.             //------遍历原treeview控件,并生成相应的XML
  57.             TransTreeSav(thetreeview.Nodes, (XmlElement)Xmlroot);


  58.             return 0;


  59.         }

  60.         private int TransTreeSav(TreeNodeCollection nodes, XmlElement ParXmlnode)
  61.         {

  62.             //-------遍历树的各个故障节点,同时添加节点至XML
  63.             XmlElement xmlnode;
  64.             Xmlroot = textdoc.SelectSingleNode("TreeExXMLCls");

  65.             foreach (TreeNode node in nodes)
  66.             {
  67.                 xmlnode = textdoc.CreateElement(node.Text);
  68.                 ParXmlnode.AppendChild(xmlnode);

  69.                 if (node.Nodes.Count > 0)
  70.                 {
  71.                     TransTreeSav(node.Nodes, xmlnode);
  72.                 }
  73.             }
  74.             textdoc.Save(xmlfilepath);

  75.             return 0;
  76.         }

  77.         #endregion

  78.         #region 遍历XML并实现向tree的转化
  79.         /// <summary>   
  80.         /// 遍历treeview并实现向XML的转化
  81.         /// </summary>   
  82.         /// <param name="XMLFilePath">XML输出路径</param>   
  83.         /// <param name="TheTreeView">树控件对象</param>   
  84.         /// <returns>0表示函数顺利执行</returns>   

  85.         public int XMLToTree(string XMLFilePath,TreeView TheTreeView)
  86.         {
  87.             //-------重新初始化转换环境变量
  88.             thetreeview = TheTreeView;
  89.             xmlfilepath = XMLFilePath;

  90.             //-------重新对XMLDocument对象赋值
  91.             textdoc.Load(xmlfilepath);

  92.             XmlNode root = textdoc.SelectSingleNode("TreeExXMLCls");
  93.             
  94.             foreach (XmlNode subXmlnod in root.ChildNodes)
  95.             {
  96.                 TreeNode trerotnod = new TreeNode();
  97.                 trerotnod.Text = subXmlnod.Name;
  98.                 thetreeview.Nodes.Add(trerotnod);
  99.                 TransXML(subXmlnod.ChildNodes, trerotnod);

  100.             }

  101.             return 0;
  102.         }

  103.         private int TransXML(XmlNodeList Xmlnodes,TreeNode partrenod)
  104.         {
  105.             //------遍历XML中的所有节点,仿照treeview节点遍历函数
  106.             foreach (XmlNode xmlnod in Xmlnodes)
  107.             {
  108.                 TreeNode subtrnod = new TreeNode();
  109.                 subtrnod.Text = xmlnod.Name;
  110.                 partrenod.Nodes.Add(subtrnod);

  111.                 if (xmlnod.ChildNodes.Count > 0)
  112.                 {
  113.                     TransXML(xmlnod.ChildNodes, subtrnod);
  114.                 }
  115.             }

  116.             return 0;

  117.         }

  118.         #endregion


  119.     }
  120. }
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-13 11:07:55 来自手机 | 显示全部楼层
本帖最后由 雪山飞狐(lzh) 于 2014-8-13 12:13 编辑

xmlwriter的写法 树形历遍用递归实现 有时间我用linq to xml改写下
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-19 00:01 , Processed in 0.389842 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表