LINQ VB How To Check For Duplicates In A List Of Objects
Oct 11, 2011
I have a list of objects, each with 2 relevant properties: "ID" and "Name". Lets call the list "lstOutcomes".I need to check the list for duplicates (meaning object1.ID = object2.ID, etc.) and set a flag (valid = false, or something) if there is at least one duplicate. Also, it would be nice to send a message to the user mentioning the "Name" of the object, when it fails.I am sure I will need to use the Group By operator to do this, but I am not used to doing that in LINQ, and the examples out there are just not helping me. This article seems to be close to what i need, but not quite and it's in C#.
Here is a starting stab at it...
Dim duplist = _
(From o As objectType In lstOutcomes _
Dim l as IList(Of Foo) = (From dataRow As DataRow In table.Select() Where CStr(dataRow("Column1")) = "A" Select New Foo(CStr(dataRow("Column1")), _ CStr(dataRow("Column2")))).ToList()
What's happening is that if i set a break-point to the constructor of Foo and step, the constructor is hit and the parameters are loaded with the arguments. However, l has empty Foo objects (the members in every object are Nothing). What could be happening here?
Dim objectsList as List(Of Object) = GetAllObjects() ' Filter from Objects just Persons ' Dim peopleList as List(Of Person) = ???
What is the most efficient and effective LINQ expression to do it?
EDIT
1 Dim selectedObjects As List(Of Object) = GetAllObjects()
2 Dim selectedPeople As IEnumerable(Of Person)= selectedObjects.OfType(Of Person)
3 Dim people As List(Of Person) = selectedPeople.ToList()
Error on 3:
Value of type 'System.Collections.Generic.List(Of System.Collections.Generic.IEnumerable(Of Person))' cannot be converted to 'System.Collections.Generic.List(Of Person)'.
I figure I should use 'Aggregate' but apparently I am getting it wrong First I get a list of my Entity objects Dim employers As List(Of myEntity) = (New XXXX()).getZZZ(userName, userType) Then I figured this would be a way to put all the names in a string Dim names as String = employers.Aggregate(Function(current, [next]) current.Name & " " & [next].Name)
Basically, I am trying to write a LINQ to Objects statement where the relationship is a grandparent, parent, child relationship. (You could also call it a Master Detail relationship.)
In Legacy code here is a simplified version what I am trying to accomplish. Dim coverages As New List(Of Coverage) Dim coverage As Coverage For Each rl In oClaimsPolicy.RiskLocations coverage = New Coverage coverage.Level = "Location" [Code] .....
If is it not clear one Location can have many Items and one Item can have many Coverages. I basically want to list the items and show the relationship between grandparent (Location), parent (Item) and child (Coverage).
I am having so trouble with the ToUpper() procedure with strings. I am using LINQ to find unique values in a list of objects. In that whole process I set the values to compare to all lowercase in order to get a proper list. My goal is to populate a dropdown list with the values. I'm attempting to set the first letter of of the string to uppercase and keep the rest lowercase however the toUpper() procedure is not working?
Private Function FixCase(ByVal strIn) As String Dim strOutput As String Dim intStringLength As Integer = strIn.Length - 1 strOutput = strIn.Substring(0, 1)
I don't know if this is doable, maybe with Linq, but I have a List(Of MyType):
Public Class MyType Property key As Char Property description As String End Class
And I want to create a Dictionary(Of Char, MyType) using the key field as the dictionary keys and the values in the List as the dictionary values, with something like:
New Dictionary(Of Char, MyType)(??)
Even if this is doable, internally it will loop through all the List items, I guess?
How do I not return duplicate random numbers with Do Until loop?
Dim numbers(5) As Integer Dim subscript As Integer Dim searchSubscript As Integer Dim randomNum As Integer Dim randomGenerator As New Random Dim isFound As Boolean
Recently, I have a requirement to develop a vb.net application wherein the input excel sheet data which has an average of 5000 records should be checked for Internal duplicates (duplicates within the same sheet) and external duplicates (duplicates which exist outside this sheet). I have gone through lot of logics..some of which are ...
- Common and currently testing out..
- First insert the excel sheet data into DB..then query by following
select distinct id,mobilenumber from scrubmaster where calltablename=<calltablename given by the uploader>
Then loop for duplicates...
[code]....
The above logic works but it takes very long time..I have tried other logics from web but they "Query timeout"...
I'm Using Griaule Grfinger X 4.2 SDK for a project. I am able to enroll templates into database, also identify and verify fingerprints against registered ones in the database.But I have a further challenging issue. I want to be able to run through the database to check for duplicates so as to identify them in which I would put duplicates in a hotlisted database.
Ok, my script which is a follow on from a previous thread on writing to a text file needs another thing added to make this one form hopefully complete. (in fact its two things).Firstly, when the 'Save' button is pressed, I want it to check to see if the textbox1 text is already used (textbox1 is the plu field, but still titled as textbox1). So if the save button is pressed, I want it to check first if that number has already been used, and if so, display an error message and don't save, and don't clear the fields so that way the user can enter a different number in for that item.
Secondly, several fields are numeric only. I've tried a couple of examples and are either too complex or just don't want to work for me. How do I ensure that some fields are numeric only (well one is a percentage, two fields are numeric and 1 is a currency field).
I want to compare two objects to check if all the properites of both the object have same value or not. for this i need to use the reflection to enumarate through all the properties of an object and check the value of the property. To try the code just i have written a Employee Class having Two Properties EmployeeNo and EmployeeName. I am creating an object of the Employee class and need to write a function that can list the values of all the properties in the class.
I had a need to mark a listview row if filenames were duplicates for n number of characters from the left. I wrote the following but it smacks of VB6.[code]...
I have this code to return a list of fund sources for our organization.
Dim FundSourceList As New List(Of FundSource) Dim fs As New FundSource If results.Count > 0 Then[code].....
The problem is that when I loop through the resulting FundSourceList all it shows is the last value. For example, if I have three fund sources (state, federal, athletic), then when I use this code to loop through all I get listed is athletic, athletic, athletic.
For Each FundSource In FundSources Debug.Print(FundSource.FundDescription) Next
So I change the code to this. I moved the creation of the fs variable inside the loop.
Dim results = From result In dsResult.Tables(0) Select result Dim FundSourceList As New List(Of FundSource) If results.Count > 0 Then[code]....
This works fine but now I'm creating a new class over and over again. It seems a little inefficient to me. Can I not create the class outside the loop and use it over and over again?
Okay so i have a very large list of string (500 000 strings) i want to check the number of duplicate strings and maybe even isolate the duplicate strings if i can.
i cant find a fast method to do so :S
i tried using a string array (slower than list) takes ~15mins
i tried using list with the code below takes ~10 mins
Is there an easy way to search through a List(Of Integer) and find duplicates? Or do I need to do loops to search through it with each number, comparing it to each one?
I'm creating an application that creates a list of 20 ramdomly selected numbers within an array and displaying those numbers in a listbox. I then need to display the duplicate numbers in an adjacent listbox by clicking the find duplicates button. How would I be able to access those 20 numbers in order to find the duplicates?
I would like to create list of child objects from list of parent object. Like If i have list of bookingroom which has one member room then i would like to create list of room from it.
eg. code:
Dim BookingRoomList As List(Of BookingRoom) = New List(Of BookingRoom) Dim RoomList As List(Of Room) = New List(Of Room) BookingRoomList = BookingRooms.FillGrid()
[Code]....
Is there any short cut method instead of iterating over for earch?