Click here to Skip to main content
15,884,425 members
Please Sign up or sign in to vote.
1.00/5 (2 votes)
See more:
Class-->
C#
public class DocumentsLists
   {
       public int DocumentId { get; set; }
       public string DocumentName { get; set; }
   }


List-->

C#
var ChkDocumentData = new List<documentslists>();
var AppDocData = new List<documentslists>();


Contents of two list--&gt;

ChkDocumentData contains:
C#
 {
   {DocumentId = 42, DocumentName ="Passport"},
   {DocumentId = 44, DocumentName ="Adhar Card"},
   {DocumentId = 45, DocumentName ="Driving License"},
   {DocumentId = 46, DocumentName ="Voter ICard"}
};


AppDocData contains :
C#
{DocumentId = 44, DocumentName ="Adhar Card"};


I want a list Contains :
C#
{
   {DocumentId = 42, DocumentName ="Passport"},
   {DocumentId = 45, DocumentName ="Driving License"},
   {DocumentId = 46, DocumentName ="Voter ICard"}
};


Thanks in advance
Posted
Updated 29-Oct-15 21:05pm
v4
Comments
Sergey Alexandrovich Kryukov 30-Oct-15 2:57am    
Why not preventing duplicates in first place, when you add data?
—SA
phil.o 30-Oct-15 3:10am    
Your DocumentsLists class obviously represents a single document. So why naming it with a List suffix, and why the plural?
Semantically, that is plain wrong, and error prone.

See this : https://msdn.microsoft.com/en-us/library/vstudio/bb300779(v=vs.100).aspx[^]

Another way
C#
var result = ChkDocumentData.Where(x => !AppDocData.Any(y => x.DocumentId == y.DocumentId));


Reference : http://stackoverflow.com/a/5636511[^]

Regards..
 
Share this answer
 
v3
Comments
Maciej Los 30-Oct-15 3:02am    
5ed!
Thanks7872 30-Oct-15 3:11am    
Thnaks Maciej.
ARYA JAGANNATH 30-Oct-15 3:05am    
I Used
IEnumerable<documentslists> onlyInFirstSet = ChkDocumentData.Except(AppDocData);

But Still It Returns
{
{DocumentId = 42, DocumentName ="Passport"},
{DocumentId = 44, DocumentName ="Adhar Card"},
{DocumentId = 45, DocumentName ="Driving License"},
{DocumentId = 46, DocumentName ="Voter ICard"}
};
Thanks7872 30-Oct-15 3:23am    
See updated solution for code block.
Try this,
C#
var result = ChkDocumentData.Where(c => !AppDocData.Any(a => a.DocumentId == c.DocumentId)).ToList();


-KR
 
Share this answer
 
Comments
ARYA JAGANNATH 30-Oct-15 3:15am    
Many Many Thanks !
Krunal Rohit 30-Oct-15 3:31am    
Did it solve your issue ?

-KR
As Rohan Leuva[^] mentioned, the simplest way is to use Except method:
C#
var resultList = ChkDocumentData.Except(AppDocData);


As Sergey Alexandrovich Kryukov[^] suggests in the comment to the question, you can use Contains[^] method to avoid duplicates during the process of adding data to the list.
C#
if(!ChkDocumentData.Contains(SomeDocument))
{
    ChkDocumentData.Add(SomeDocument);
}


But the best way is to create custom class collection and provide Add method which can handle such of functionality (avoiding duplicates). See: Walkthrough: Creating Your Own Collection Class[^]
C#
public class DocumentsCollection : CollectionBase
{
   public void Add(DocumentList dl)
    {
        if (!List.Contains(dl))
        {
             List.Add(dl);
        }
    }
}
 
Share this answer
 
v2
Comments
Thanks7872 30-Oct-15 3:25am    
Well explained. +5!
Maciej Los 30-Oct-15 3:33am    
Thank you, Rohan.
IEnumerable<int> documentIds = ChkDocumentData.Select(c => c.DocumentId).Except(AppDocData.Select(c => c.DocumentId));
IEnumerable<documentslists> result = ChkDocumentData.Where(c => documentIds.Contains(c.DocumentId));
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900