在IEnumerable <xelement>类型的2个文件上执行内部联接

时间:2015-08-12 22:45:52

标签: c# linq join ienumerable xelement

假设我有2个IEnumerable val html = "html" lazy val compileCopyTask = taskKey[Unit](s"Copy $html.") compileCopyTask := { println(s"Start copying $html") val mainVersion = scalaVersion.value.split("""\.""").take(2).mkString(".") val to = target.value / ("scala-" + mainVersion) / html / "classes" to.mkdirs() val from = baseDirectory.value / html IO.copyDirectory(from,to) println(s"$from -> $to...done.") } compile in Compile := { compileCopyTask.value (compile in Compile).value } &gt;类型的文件。我如何在它们上执行内连接和/或组连接?我尝试过以下但是.Join方法不适用于IEnumerable。任何帮助将不胜感激。

<XElement

2 个答案:

答案 0 :(得分:1)

假设file1file2包含IEnumerable<XElement>,其中每个XElement都有子元素OrderID,您可以按OrderID值进行加入像这样:

var innerjoin = file1.Join(file2, 
                            c => (string)c.Element("OrderID"), 
                            o => (string)o.Element("OrderID"),
                            (c, o) => new {Customer = c, Order = o});

或使用等效的查询语法:

var innerjoin = from c in file1
                join o in file2 
                   on (string)c.Element("OrderID") equals (string)o.Element("OrderID")
                select new {Customer = c, Order = o};

答案 1 :(得分:0)

在网页上试用以下代码:https://code.msdn.microsoft.com/LINQ-Join-Operators-dabef4e9。您可能想要加入实际的ID号而不仅仅是元素名称。

           var innerjoin = from f1 in file1.Elements("OrderID")
                            join f2 in file2.Elements("OrderID") on f1 equals f2
                            select new { file1, file2 };​