我正在将记录添加到XML文件。我想将ID属性设置为第一个自由值或最后一个值+1。(如果id为1,3,4,7,则我要设置的id为2,如果1,2,3,4为5)。
这是我的xml结构
<ArrayOfDirectory>
<Directory Id="0">
<DirectoryPath>E:\tempFolder1</DirectoryPath>
<Info>some info</Info>
</Directory>
<Directory Id="2">
<DirectoryPath>C:\tempFolder2</DirectoryPath>
<Info>some info</Info>
</Directory>
</ArrayOfDirectory>
这样,我将记录插入文件中
WatchedDirectory directoryToSave = (WatchedDirectory)entity;
XElement newDirectory = new XElement("WatchedDirectory",
new XAttribute("Id", directoryToSave.Id),
new XElement("DirectoryPath", directoryToSave.DirectoryPath),
new XElement("Info","some info"));
XDocument xDocument = XDocument.Load(DirectoryXmlPath);
xDocument.Root.Add(newDirectory);
xDocument.Save(DirectoryXmlPath);
我的问题是添加新记录时设置第一个空闲ID的最简单方法是什么?
答案 0 :(得分:0)
您可以使用以下扩展方法:
public static int GetNextSequenceNum(this IEnumerable<int> sequence)
{
var nums = sequence.OrderBy(i => i).ToList();
var max = nums[nums.Count - 1];
return Enumerable.Range(0, max + 1)
.GroupJoin(nums, i => i, i => i, (i, found) =>
{
var f = found.ToList();
if (f.Count == 0)
return i;
else
return (int?)null;
})
.First(i => i.HasValue)
.Value;
}
我不保证这是100%准确的,但是您需要:
对于1,3,4,7产生2 对于1,2,3,4产生5