Solved

Linq Query remove duplicates from list

Posted on 2016-09-08
2
35 Views
Last Modified: 2016-09-28
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
Comment
Question by:Member_2_7967608
  • 2
2 Comments
 
LVL 62

Accepted Solution

by:
Fernando Soto earned 500 total points (awarded by participants)
ID: 41790692
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
 
LVL 62

Expert Comment

by:Fernando Soto
ID: 41819431
Solution was posted.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article is for Object-Oriented Programming (OOP) beginners. An Interface contains declarations of events, indexers, methods and/or properties. Any class which implements the Interface should provide the concrete implementation for each Inter…
Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
Here's a very brief overview of the methods PRTG Network Monitor (https://www.paessler.com/prtg) offers for monitoring bandwidth, to help you decide which methods you´d like to investigate in more detail.  The methods are covered in more detail in o…
A short film showing how OnPage and Connectwise integration works.

947 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now