Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Linq Query remove duplicates from list

Posted on 2016-09-08
2
Medium Priority
?
81 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
2 Comments
 
LVL 64

Accepted Solution

by:
Fernando Soto earned 2000 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 64

Expert Comment

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

Featured Post

Prepare for your VMware VCP6-DCV exam.

Josh Coen and Jason Langer have prepared the latest edition of VCP study guide. Both authors have been working in the IT field for more than a decade, and both hold VMware certifications. This 163-page guide covers all 10 of the exam blueprint sections.

Question has a verified solution.

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

Wouldn’t it be nice if you could test whether an element is contained in an array by using a Contains method just like the one available on List objects? Wouldn’t it be good if you could write code like this? (CODE) In .NET 3.5, this is possible…
This article aims to explain the working of CircularLogArchiver. This tool was designed to solve the buildup of log file in cases where systems do not support circular logging or where circular logging is not enabled
In this video, Percona Solution Engineer Rick Golba discuss how (and why) you implement high availability in a database environment. To discuss how Percona Consulting can help with your design and architecture needs for your database and infrastr…
Want to learn how to record your desktop screen without having to use an outside camera. Click on this video and learn how to use the cool google extension called "Screencastify"! Step 1: Open a new google tab Step 2: Go to the left hand upper corn…

704 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