如何按字母顺序对 DBML 对象进行排序?
Posted
技术标签:
【中文标题】如何按字母顺序对 DBML 对象进行排序?【英文标题】:How to sort DBML objects alphabetically? 【发布时间】:2010-10-28 15:59:03 【问题描述】:我的项目中有一个包含所有 LinqToSql 对象的 DBML 文件。最初我从数据库中导入它们,一切都很好。现在随着我的数据库不断增长,我一直在将新表添加到 O/R 设计器中的图表中,但它们总是被附加到 XML 的末尾。这有点麻烦,因为当我定义外键时,它总是按照它们在 XML 中出现的顺序列出可用的表。
任何想法如何根据表名按字母顺序对 XML 表声明进行排序?
【问题讨论】:
【参考方案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,根据您的喜好对其进行排序并输出更新的版本。
【讨论】:
好的,这是一个勤奋的解决方案,而且在技术上是正确的,但我希望有一个懒惰的出路...... :) 可能不会。我的第一个选择是手动编写文件,但我认为你不会喜欢这样的:)。以上是关于如何按字母顺序对 DBML 对象进行排序?的主要内容,如果未能解决你的问题,请参考以下文章