![]() |
LINQ related query
Hi I have a question regarding joining xml files on a key which is present in all file, following is my code docFTR is of type XDocument xdList is List(Of XDocument) Dim doc = From x In docFTR.Descendants("Data") From i In xdList.GetRange(0, 1) Join d In xdList(0).Descendants("Data") On x.Descendants("Guid").Value Equals d.Descendants("Guid").Value i need to programmatically replace xdList(0) with the current XDcoument which comes from "From i in xdList.getRange(0,2)" GetRange(0, could be 2 to 10) Any help is welcome TIA Jacko |
Re: LINQ related query
Jackson420 wrote:
> Hi > > I have a question regarding joining xml files on a key which is present in > all file, following is my code > > docFTR is of type XDocument > xdList is List(Of XDocument) > Dim doc = From x In docFTR.Descendants("Data") From i In xdList.GetRange(0, > 1) Join d In xdList(0).Descendants("Data") On x.Descendants("Guid").Value > Equals d.Descendants("Guid").Value > > i need to programmatically replace xdList(0) with the current XDcoument > which comes from "From i in xdList.getRange(0,2)" > > GetRange(0, could be 2 to 10) Join d in i.Descendants("Data") should do but that sounds too obvious maybe. If that does not help then consider to post some sample data, at least I am not good at writing queries without seeing some sample data. -- Martin Honnen --- MVP Data Platform Development http://msmvps.com/blogs/martin_honnen/ |
Re: LINQ related query
Here is a sample data of 1 file, you may make 3 more of the same and try to
join them on Guid and create an xml file <?xml version="1.0" encoding="utf-8"?> <ColumnData> <Data> <Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid> <Data>Sales org#</Data> </Data> <Data> <Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid> <Data>G146</Data> </Data> </ColumnData Note: the XDocument must not be hard coded in the command TIA Jacko "Martin Honnen" <mahotrash@yahoo.de> wrote in message news:uwBnVkGQLHA.456@TK2MSFTNGP06.phx.gbl... > Jackson420 wrote: >> Hi >> >> I have a question regarding joining xml files on a key which is present >> in all file, following is my code >> >> docFTR is of type XDocument >> xdList is List(Of XDocument) >> Dim doc = From x In docFTR.Descendants("Data") From i In >> xdList.GetRange(0, 1) Join d In xdList(0).Descendants("Data") On >> x.Descendants("Guid").Value Equals d.Descendants("Guid").Value >> >> i need to programmatically replace xdList(0) with the current XDcoument >> which comes from "From i in xdList.getRange(0,2)" >> >> GetRange(0, could be 2 to 10) > > Join d in i.Descendants("Data") > should do but that sounds too obvious maybe. > > If that does not help then consider to post some sample data, at least I > am not good at writing queries without seeing some sample data. > > -- > > Martin Honnen --- MVP Data Platform Development > http://msmvps.com/blogs/martin_honnen/ |
Re: LINQ related query
Jackson420 wrote:
> Here is a sample data of 1 file, you may make 3 more of the same and try to > join them on Guid and create an xml file > > <?xml version="1.0" encoding="utf-8"?> > <ColumnData> > <Data> > <Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid> > <Data>Sales org#</Data> > </Data> > <Data> > <Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid> > <Data>G146</Data> > </Data> > </ColumnData Here is some sample code processing a List(Of XDocument) of the above structure and creating a merged document: Dim doc1 As XDocument = <?xml version="1.0" encoding="utf-8"?> <ColumnData> <Data> <Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid> <Data>Sales org #1</Data> </Data> <Data> <Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid> <Data>G146</Data> </Data> </ColumnData> Dim doc2 As XDocument = <?xml version="1.0" encoding="utf-8"?> <ColumnData> <Data> <Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid> <Data>Sales org #2</Data> </Data> <Data> <Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid> <Data>G147</Data> </Data> </ColumnData> Dim doc3 As XDocument = <?xml version="1.0" encoding="utf-8"?> <ColumnData> <Data> <Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid> <Data>Sales org #3</Data> </Data> </ColumnData> Dim doc4 As XDocument = <?xml version="1.0" encoding="utf-8"?> <ColumnData> <Data> <Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid> <Data>G148</Data> </Data> </ColumnData> Dim docs As New List(Of XDocument)() docs.Add(doc1) docs.Add(doc2) docs.Add(doc3) docs.Add(doc4) Dim mergedDoc As XDocument = New XDocument( _ New XElement(doc1.Root.Name, _ From data In docs.<ColumnData>.<Data> _ Group data By guid = data.<Guid>.Value Into G = Group _ Select New XElement("Data", G(0).<Guid>, G.<Data>))) mergedDoc.Save(Console.Out) Output is as follows: <ColumnData> <Data> <Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid> <Data>Sales org #1</Data> <Data>Sales org #2</Data> <Data>Sales org #3</Data> </Data> <Data> <Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid> <Data>G146</Data> <Data>G147</Data> <Data>G148</Data> </Data> </ColumnData> Is that what you want? Or how should the merged document look exactly? -- Martin Honnen --- MVP Data Platform Development http://msmvps.com/blogs/martin_honnen/ |
Re: LINQ related query
Excellent job - on the dot
MANY THANKS Jacko "Martin Honnen" <mahotrash@yahoo.de> wrote in message news:uODD9eIQLHA.4988@TK2MSFTNGP04.phx.gbl... > Jackson420 wrote: >> Here is a sample data of 1 file, you may make 3 more of the same and try >> to join them on Guid and create an xml file >> >> <?xml version="1.0" encoding="utf-8"?> >> <ColumnData> >> <Data> >> <Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid> >> <Data>Sales org#</Data> >> </Data> >> <Data> >> <Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid> >> <Data>G146</Data> >> </Data> >> </ColumnData > > Here is some sample code processing a List(Of XDocument) of the above > structure and creating a merged document: > > Dim doc1 As XDocument = <?xml version="1.0" encoding="utf-8"?> > <ColumnData> > <Data> > > <Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid> > <Data>Sales org #1</Data> > </Data> > <Data> > > <Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid> > <Data>G146</Data> > </Data> > </ColumnData> > > Dim doc2 As XDocument = <?xml version="1.0" encoding="utf-8"?> > <ColumnData> > <Data> > > <Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid> > <Data>Sales org #2</Data> > </Data> > <Data> > > <Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid> > <Data>G147</Data> > </Data> > </ColumnData> > > Dim doc3 As XDocument = <?xml version="1.0" encoding="utf-8"?> > <ColumnData> > <Data> > > <Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid> > <Data>Sales org #3</Data> > </Data> > </ColumnData> > > Dim doc4 As XDocument = <?xml version="1.0" encoding="utf-8"?> > <ColumnData> > <Data> > > <Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid> > <Data>G148</Data> > </Data> > </ColumnData> > > Dim docs As New List(Of XDocument)() > docs.Add(doc1) > docs.Add(doc2) > docs.Add(doc3) > docs.Add(doc4) > > Dim mergedDoc As XDocument = New XDocument( _ > New XElement(doc1.Root.Name, _ > From data In docs.<ColumnData>.<Data> _ > Group data By guid = data.<Guid>.Value Into G = Group > _ > Select New XElement("Data", G(0).<Guid>, G.<Data>))) > > mergedDoc.Save(Console.Out) > > Output is as follows: > > <ColumnData> > <Data> > <Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid> > <Data>Sales org #1</Data> > <Data>Sales org #2</Data> > <Data>Sales org #3</Data> > </Data> > <Data> > <Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid> > <Data>G146</Data> > <Data>G147</Data> > <Data>G148</Data> > </Data> > </ColumnData> > > Is that what you want? Or how should the merged document look exactly? > > > -- > > Martin Honnen --- MVP Data Platform Development > http://msmvps.com/blogs/martin_honnen/ |
Re: LINQ related query
Hi Martin The final requirement is a bit different, i completed it through 2-stage process, lets see if you can do this <ColumnData> <Data> <Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid> <Data>Sales org #1|Sales org #2|Sales org #3</Data> </Data> <Data> <Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid> <Data>G146|G147|G148 </Data> </ColumnData> "Martin Honnen" <mahotrash@yahoo.de> wrote in message news:uODD9eIQLHA.4988@TK2MSFTNGP04.phx.gbl... > Jackson420 wrote: >> Here is a sample data of 1 file, you may make 3 more of the same and try >> to join them on Guid and create an xml file >> >> <?xml version="1.0" encoding="utf-8"?> >> <ColumnData> >> <Data> >> <Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid> >> <Data>Sales org#</Data> >> </Data> >> <Data> >> <Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid> >> <Data>G146</Data> >> </Data> >> </ColumnData > > Here is some sample code processing a List(Of XDocument) of the above > structure and creating a merged document: > > Dim doc1 As XDocument = <?xml version="1.0" encoding="utf-8"?> > <ColumnData> > <Data> > > <Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid> > <Data>Sales org #1</Data> > </Data> > <Data> > > <Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid> > <Data>G146</Data> > </Data> > </ColumnData> > > Dim doc2 As XDocument = <?xml version="1.0" encoding="utf-8"?> > <ColumnData> > <Data> > > <Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid> > <Data>Sales org #2</Data> > </Data> > <Data> > > <Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid> > <Data>G147</Data> > </Data> > </ColumnData> > > Dim doc3 As XDocument = <?xml version="1.0" encoding="utf-8"?> > <ColumnData> > <Data> > > <Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid> > <Data>Sales org #3</Data> > </Data> > </ColumnData> > > Dim doc4 As XDocument = <?xml version="1.0" encoding="utf-8"?> > <ColumnData> > <Data> > > <Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid> > <Data>G148</Data> > </Data> > </ColumnData> > > Dim docs As New List(Of XDocument)() > docs.Add(doc1) > docs.Add(doc2) > docs.Add(doc3) > docs.Add(doc4) > > Dim mergedDoc As XDocument = New XDocument( _ > New XElement(doc1.Root.Name, _ > From data In docs.<ColumnData>.<Data> _ > Group data By guid = data.<Guid>.Value Into G = Group > _ > Select New XElement("Data", G(0).<Guid>, G.<Data>))) > > mergedDoc.Save(Console.Out) > > Output is as follows: > > <ColumnData> > <Data> > <Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid> > <Data>Sales org #1</Data> > <Data>Sales org #2</Data> > <Data>Sales org #3</Data> > </Data> > <Data> > <Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid> > <Data>G146</Data> > <Data>G147</Data> > <Data>G148</Data> > </Data> > </ColumnData> > > Is that what you want? Or how should the merged document look exactly? > > > -- > > Martin Honnen --- MVP Data Platform Development > http://msmvps.com/blogs/martin_honnen/ |
Re: LINQ related query
Jackson420 wrote:
> The final requirement is a bit different, i completed it through 2-stage > process, lets see if you can do this > > <ColumnData> > <Data> > <Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid> > <Data>Sales org #1|Sales org #2|Sales org #3</Data> > </Data> > <Data> > <Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid> > <Data>G146|G147|G148 > </Data> > </ColumnData> Yes, that is possible, change the "merge" query to Dim mergedDoc As XDocument = New XDocument( _ New XElement(doc1.Root.Name, _ From data In docs.<ColumnData>.<Data> _ Group data By guid = data.<Guid>.Value Into G = Group _ Select New XElement("Data", G(0).<Guid>, New XElement("Data", String.Join("|", G.<Data>.Select(Function(d) d.Value).ToArray()))))) (only all on one line). -- Martin Honnen --- MVP Data Platform Development http://msmvps.com/blogs/martin_honnen/ |
Re: LINQ related query
Thanks
"Martin Honnen" <mahotrash@yahoo.de> wrote in message news:%23$rjMx4QLHA.2100@TK2MSFTNGP04.phx.gbl... > Jackson420 wrote: > >> The final requirement is a bit different, i completed it through 2-stage >> process, lets see if you can do this >> >> <ColumnData> >> <Data> >> <Guid>d2152461-5005-4f22-af65-66f1fe734e81</Guid> >> <Data>Sales org #1|Sales org #2|Sales org #3</Data> >> </Data> >> <Data> >> <Guid>4bea02ee-f986-423e-a093-71d78f61ea9b</Guid> >> <Data>G146|G147|G148 >> </Data> >> </ColumnData> > > Yes, that is possible, change the "merge" query to > > Dim mergedDoc As XDocument = New XDocument( _ > New XElement(doc1.Root.Name, _ > From data In docs.<ColumnData>.<Data> _ > Group data By guid = data.<Guid>.Value Into G = Group > _ > Select New XElement("Data", G(0).<Guid>, New > XElement("Data", String.Join("|", G.<Data>.Select(Function(d) > d.Value).ToArray()))))) > > (only all on one line). > > > -- > > Martin Honnen --- MVP Data Platform Development > http://msmvps.com/blogs/martin_honnen/ |
| All times are GMT. The time now is 07:55 PM. |
Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.