Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > ASP .Net > LINQ related query

Reply
Thread Tools

LINQ related query

 
 
Jackson420
Guest
Posts: n/a
 
      08-20-2010

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



 
Reply With Quote
 
 
 
 
Martin Honnen
Guest
Posts: n/a
 
      08-20-2010
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/
 
Reply With Quote
 
 
 
 
Jackson420
Guest
Posts: n/a
 
      08-20-2010
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" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> 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/



 
Reply With Quote
 
Martin Honnen
Guest
Posts: n/a
 
      08-20-2010
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/
 
Reply With Quote
 
Jackson420
Guest
Posts: n/a
 
      08-21-2010
Excellent job - on the dot

MANY THANKS
Jacko


"Martin Honnen" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> 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/



 
Reply With Quote
 
Jackson420
Guest
Posts: n/a
 
      08-24-2010

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" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> 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/



 
Reply With Quote
 
Martin Honnen
Guest
Posts: n/a
 
      08-24-2010
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/
 
Reply With Quote
 
Jackson420
Guest
Posts: n/a
 
      08-24-2010
Thanks

"Martin Honnen" <(E-Mail Removed)> wrote in message
news:%23$(E-Mail Removed)...
> 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/



 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Linq or not Linq George ASP .Net 4 11-05-2008 04:53 PM
Linq problem in GridView (related field) Raynald ASP .Net 0 08-12-2008 09:09 AM
SQL Query to Linq (Group By and Sum) Alex Sauceda ASP .Net 6 02-04-2008 10:26 PM
LINQ Query shapper ASP .Net 2 10-18-2007 02:59 PM
Please translate this C# LINQ query into VB for me !!!!! ChrisN ASP .Net 1 08-07-2007 07:29 AM



Advertisments