【问题标题】:How to sort DBML objects alphabetically?如何按字母顺序对 DBML 对象进行排序?
【发布时间】:2010-10-28 15:59:03
【问题描述】:

我的项目中有一个包含所有 LinqToSql 对象的 DBML 文件。最初我从数据库中导入它们,一切都很好。现在随着我的数据库不断增长,我一直在将新表添加到 O/R 设计器中的图表中,但它们总是被附加到 XML 的末尾。这有点麻烦,因为当我定义外键时,它总是按照它们在 XML 中出现的顺序列出可用的表。

任何想法如何根据表名按字母顺序对 XML 表声明进行排序?

【问题讨论】:

    标签: c# linq-to-sql or-designer


    【解决方案1】:

    我知道这是旧的,但我还想对我的 DBML 中的表和函数进行排序,使其在 Git 中更易于管理。以下控制台应用程序代码似乎运行良好。您可以将 DBML 文件拖放到 exe 上,也可以在项目中设置 bat 文件或构建事件。

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Xml.Linq;
    
    namespace DbmlSorter
    {
        class Program
        {
            static void Main(string[] args)
            {
                if (args.Length == 0)
                    return;
    
                var fileName = args[0];
    
                try
                {
                    if (!File.Exists(fileName))
                        return;
    
                    SortElements(fileName);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
    
                Console.WriteLine();
                Console.WriteLine("Press any key to exit...");
                Console.ReadKey();
            }
    
            private static void SortElements(string fileName)
            {
                var root        = XElement.Load(fileName);
    
                var connections = new SortedDictionary<string, XElement>();
                var tables      = new SortedDictionary<string, XElement>();
                var functions   = new SortedDictionary<string, XElement>();
                var others      = new SortedDictionary<string, XElement>();
    
                foreach (var element in root.Elements())
                {
                    var key = element.ToString();
    
                    if (key.StartsWith("<Connection"))
                        connections.Add(key, element);
    
                    else if (key.StartsWith("<Table"))
                        tables.Add(key, element);
    
                    else if (key.StartsWith("<Function"))
                        functions.Add(key, element);
    
                    else
                        others.Add(key, element);
                }
    
                root.RemoveNodes();
    
                foreach (var pair in connections)
                {
                    root.Add(pair.Value);
    
                    Console.WriteLine(pair.Key);
                }
    
                foreach (var pair in tables)
                {
                    root.Add(pair.Value);
    
                    Console.WriteLine(pair.Key);
                }
    
                foreach (var pair in functions)
                {
                    root.Add(pair.Value);
    
                    Console.WriteLine(pair.Key);
                }
    
                foreach (var pair in others)
                {
                    root.Add(pair.Value);
    
                    Console.WriteLine(pair.Key);
                }
    
                root.Save(fileName);
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      一种可能的解决方案是编写一个小型应用程序,该应用程序读取 XML,根据您的喜好对其进行排序并输出更新的版本。

      【讨论】:

      • 好的,这是一个勤奋的解决方案,而且在技术上是正确的,但我希望有一个懒惰的出路...... :)
      • 可能不会。我的第一个选择是手动编写文件,但我认为你不会喜欢这样的:)。
      猜你喜欢
      • 1970-01-01
      • 2013-10-28
      • 2019-06-15
      • 2011-08-29
      • 2014-12-30
      • 2021-04-23
      • 2023-01-30
      • 2010-11-23
      • 1970-01-01
      相关资源
      最近更新 更多