Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 103
  • Last Modified:

Linq Query remove duplicates from list

Hi

I had question related to this Refactor C# code.

The source classes for DTO's are the in the above question. I want to remove duplicates created in salesorders List based on productCode ( mapping values[1] )

The issue is each List has as child list variable called scns (values[5]) which also needs to be created from the source data

 req.salesOrders = (from docArray in resp.transaction.quote_data.sub_documents
                                   let document = Regex.Split(docArray, @"\$,\$")
                                   let values = document.attributes[0].value.ToString().Split(new[] { "**" }, StringSplitOptions.None)
                                   where (document.attributes != null && document.attributes.Length > 0) && !string.IsNullOrWhiteSpace(document.attributes[0].value.ToString()) && !string.IsNullOrEmpty(values[3]) && (!string.IsNullOrWhiteSpace(values[5]) && values[5] != "$$")
                                   select new salesOrder()
                                   {
                                       productCode = values[1],
                                       salesOrderType = values[2],
                                       startDate = DateTime.Parse(values[3]).ToString("yyyy-MM-dd"),
                                       pays = !string.IsNullOrWhiteSpace(values[4]) ? int.Parse(values[4]) : 0,
                                       scns = (from code in values[5].Split(new[] { "$$" }, StringSplitOptions.RemoveEmptyEntries)
                                               select
                                               new scns()
                                               {
                                                   scnCode = code
                                               }).GroupBy(o => o.scnCode).Select(g => g.First()).ToList()

                                   }).ToList() ;


Example req.salesOrders  should have single record for req.salesOrders=10  (product) this should be unique.   All the req.scns

> 1**10**New Client**2016-11-02**250**F0040Z$$F0040Z$$F00141$,$1**,1W**New Client - Add2 Product**2016-11-02**250**F71900$$F0070X

> 1**10**New Client**2016-11-02**250**F00498$$F00493$$F00141

Example in above it should return
{
productCode = 10
 salesOrderType =New Client,
 startDate = '2016-11-02',
 pays = 250
 scns = {F0040Z,F00141, F00498,F00493}  //removed dups . this is implemented
}
{
productCode = 1W
 salesOrderType =New Client - Add2 Product,
 startDate = '2016-11-02',
 pays = 250
 scns = { F71900,F0070X}
}
0
Member_2_7967608
Asked:
Member_2_7967608
  • 2
1 Solution
 
Fernando SotoCommented:
Hi Member_2_7967608;

I am confused by your query. For example I thought that resp.transaction.quote_data.sub_documents was an array of strings. If so then array of string does not have an attributes property. I am also not sure what you are trying to do in the part of the query for scns. Please take a moment to comment the code so I can hopefully understand it and what you are trying to accomplish. Also when posting code in a comment first copy the code you are going to post then place the cursor in the text box where you want to paste it then in the menu bar of the post text box click on the icon CODE then press the CTRL-V keys to paste it. When you submit the post it will look like the code below. This will make reading your code much easier on my eyes, thanks.

req.salesOrders = (from docArray in resp.transaction.quote_data.sub_documents
                   let document = Regex.Split(docArray, @"\$,\$")
                   let values = document.attributes[0].value.ToString().Split(new[] { "**" }, StringSplitOptions.None)
                   where (document.attributes != null && document.attributes.Length > 0) && !string.IsNullOrWhiteSpace(document.attributes[0].value.ToString()) && !string.IsNullOrEmpty(values[3]) && (!string.IsNullOrWhiteSpace(values[5]) && values[5] != "$$")
                   select new salesOrder()
                   {
                       productCode = values[1],
                       salesOrderType = values[2],
                       startDate = DateTime.Parse(values[3]).ToString("yyyy-MM-dd"),
                       pays = !string.IsNullOrWhiteSpace(values[4]) ? int.Parse(values[4]) : 0,
                       scns = (from code in values[5].Split(new[] { "$$" }, StringSplitOptions.RemoveEmptyEntries)
                               select
                               new scns()
                               {
                                   scnCode = code
                               }).GroupBy(o => o.scnCode).Select(g => g.First()).ToList()
                   }).ToList();

Open in new window

0
 
Fernando SotoCommented:
Solution was posted.
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now