LINQ Objects - Group All The MyObjects Together That Share The Same Value And Then Return That Value?
Nov 16, 2010
I am having trouble following some of the examples at MSDN for LINQ.Basically I have a List Of MyObject. MyObject has a property called Value which is an integer.I want to group all the MyObjects together that share the same Value and then return that Value where the count of the group is greater than 5.I have tried the following,
dim foak = From o as MyObject in MyObjectList _
Group o By o.Value into Count _
WHERE Count > 5 _
Select o.Value
How do I order by and group by in a Linq query?I tried..Dim iPerson = From lqPersons In objPersons Where Len(lqPersons.Person) > 0 Group lqPersons By key = lqPersons.Name Into Group Order By Group descending Select Group, key
For Each i In iPerson tmp = tmp & vbNewLine & i.key & ", " & i.Group.Count Next
How do I order by a passed string value on my list of objects? i need to do paging and sorting on my List(Of) objects the paging is no problem but I don;t know who to get the Order By to work.Here is what I am currently doing and it's working great:[code]
I have an object (MyObj) that itself will hold a List of other objects of various types and I want to count them as they are added to MyObj.That's the simple explanation, anyways...I have an Interface (MyInterface) that all sub-objects agree to. MyObj has a List(Of MyInterface) property that all the sub-objects are added to. MyInterface will expose a property that lets me figure out what subtype each object is (the sub-objects do not inherit from MyObj at all).
But I want to count these sub-objects as they are added to the list, and I'm trying to find a good way to do it. I don't need to worry about decrementing the count, as I am going to mimic the behavior of String and just create a new instance of MyObj if it ever changes, so all my counts will start from 0. This'll hit the garbage collector a bit, but I think this will allow for simpler (and safer) code. The only sane way I can think of to count objects is a very large structure in MyObj that uses bytes to hold the count (I will never have more than 255 of any given sub-object in the list in MyObj). But, even using bytes, this structure will be about 100-200 bytes big in memory (I have that many sub-objects), and I anticipate having a fair amount of MyObj copies running around, too.
I'll also need a large Select Case to know which count property to increment when a new sub-object is added. This seems to be a bit ugly, though I've used this approach several times already.What I am wondering is, instead of counting each object as it is added to the list, is there some way to query the list and count only the objects of a specific type? I wouldn't need to store this anywhere, since it would be dynamic, like querying a database and asking for a count of a specific column or type of record.I suspect Linq can do this, but Linq is also quite slow. Are there other approaches? Perhaps a predicate of some kind?VB (I am not a C# guy):
From i in MyObj.MyList Group i by i.GetType into g Let c as Int32 = g.Count() And that's it so far. I am still googling, but I am getting way too many C# and SQL references.
I am reading from a log file.My target is to display the 10 most popular requested URL's of a website.One way to do this is to read all log entries and save each URL to a Dictionary. The dictionary has the URL as the Key and the number of visits as the Value. If a URL exists in the dictionary the Value of that URL's Key is increased +1, otherwise a new Key/Value pair is added with a value of 1.
Once the processing is finished the dictionary is sorted by Value and the top 10 entries are shown.This might work, however it could cause a serious memory problem when dealing with a log file of a website which has thousands of different page url's (think query strings).Since I only need the top 10 entries, is there a way to avoid placing all the URL's into memory and still get the top 10 URL + Visits count?
I have a form with a series of basic objects,, a list box a few buttons, a few text boxes and a few labels..
Anchor property works just fine on all of them except one text box and one label. The property is clearly SET on both objects and I can't, for the love of me, figure out what is making these two act "disobediently".
I have an object called offer and it has sub object price as decimal and provider_ID as integer. What I need is I have list (of offer) and I need to get cheapest price for each provider. So lets says I have following:
How can I make a linq query (from item in offers group by item.provider_id into max(item.price)) like this. Because using group by I am not able to get all information of offer object. beside provider_ID and price I have more information. That's why I don't want to have (with {item.price, item.provider_ID}) etc. selecting each one by one.
And results of filtering should have only provide_ID Price ---------------------- 1 15 2 20 3 5
I have the following LINQ statement, which performs a simple linq query and assigns the resulting values labels on an asp.net web form:
Dim db As New MeetingManagerDataContext Dim q = From s In db.vwRoomAvailabilities _ Where s.MeetingID = lblMeetingID.Text _
[code]....
Originally, there was going to be only a single row result and you can see I'm using FirstOrDefault() to grab that single value which works great. But the design has changed, and multiple rows can now be returned by the query. I need to now Group By the MeetingID above, and SUM each of the selected columns (i.e. s.AllRequestedDoubles).
how i can get a list of users who are members of a group in Active Directory. A vb.net example would be great. I can list all users in AD, but cannot get just the users in a group.
Also do anybody know of a really easy tutorial on LDAP queries with vb.net examples.
I have a list of object with 3 properties (quantity, service, name)I want to have all names and services in my list (kinda cross join) and the grouped quantity of the row corresponding. Not clear i guess
Quantity Service Name 3 Srv2 Bob 4 Srv2 Paul 2 Srv1 Paul 1 Srv2 Nick
I want as output All the services and all the names and corresponding quantities (0 if none)
Srv1 Paul 2 Srv1 Bob 0 Srv1 Nick 0
[code]....
Here is what I got so far, but I dont even get the expected resultsAnd I am acutally certain there is a pretty easy way of achieving what i want...
Dim services = (From a In interventions Select New With {.Service = a.Service}).Distinct() Dim months = (From b In interventions Select New With {.Month = b.DateHeureIntervention.Month}).Distinct() 'Dim query = (From s In services _
I have a table "People" with the following columns:
-FullName (nvarchar not null) -DOB (datetime null)
I want to write a LINQ to SQL to group the people by age, like following result:
Age 19: 4 ppl Age 20: 5 ppl Age 21: 6 ppl Here's my try: Dim query = From ppl In db.People _ Select New With {.Age = DateTime.Now.Year - CDate(ppl.DOB).Year, .CountAge = ppl.Count}
Notice that there are no DOB record for some people in the tables, so these shall not be included. The DOB column has record like this 1982-10-24 10:12:45 AM because it's a DateTime column.
I have a Linq Group By query that works. Here's the query:
Dim query = From fb As Feedback In lst Where fb.Seller.login_name.ToLower = UserName.ToLower Order By fb.transaction_id Descending, fb.creation Descending _
[Code]...
I don't like working with anonymous types so I'm trying to delare the result and am hitting an InvalidCastException.
I have a Linq Group By query that works. Here's the query:
Dim query = From fb As Feedback In lst Where fb.Seller.login_name.ToLower = UserName.ToLower Order By fb.transaction_id Descending, fb.creation Descending _ Group fb By fb.transaction_id _ Into Group
I don't like working with anonymous types so I'm trying to delare the result and am hitting an InvalidCastException.
So, armed with this information, here's the declaration used:
Dim query As IEnumerable(Of IGrouping(Of Int32?, IEnumerable(Of Feedback)))
Here's the error returned:
Unable to cast object of type 'System.Linq.GroupedEnumerable`4[Feedback,System.Nullable`1[System.Int32],Feedback,VB$AnonymousType_0`2[System.Nullable`1[System.Int32],System.Collections.Generic.IEnumerable`1[Feedback]]]' to type
I'm trying to figure out how to use Group Joins in LINQ queries under VB.net. For some reason, every example I seem to find on the syntax is just plain At least, that's what my compiler keeps telling me. This is a simple example where I want to join orders to their order items so that I end up with a type that contains a collection of order items grouped together by their orderId's:
Dim groupedOrders = (From o In orders Group Join i In orderItems On o.OrderId Equals a.OrderId Into myOrders Select o.OrderId, myOrders).ToList()
What I'm currently running into in this example is that the 'myOrders' group I'm creating errors out with: Definition of method 'myOrders' is not accessible in this context.
I have a user input screen that allows them to select input values and the resulting query is dependent on which values the user entered. The resulting query groups up the results to present a list of unique customers
Simplified table design - A customer can be in many states [code...]
My head is fuzzled with this. I have an xml doc which has the layout for a grid stored in it. If you notice the columns are stored as "Items" in the XML. I am trying to retrieve each "Item" out of the XML using LINQ but no matter what I do I keep taking on straggler properties that I don't need.
I have the following query that groups parking spaces by their garage, but I can't figure out how to iterate the data in the view.
Public Function FindAllSpaces() Implements ISpaceRepository.FindAllSpaces Dim query = _ From s In db.spaces _ Order By s.name Ascending _
[code]....
The controller is taking the query object as is and putting it into the viewdata.model and as stated the view is not currently strongly typed as I haven't been able to figure out how to do this. I have run the query successfully in linqpad.
I have a list of attachments that I need to group by clientCLID and EmailAddress. From this grouped list I only need a list of clientCLIDs. After fiddling for a while I've managed to get it to work as follows:
I spent a lot of time on this problem. I am able to do simple Group By LINQ queries (on one property) but for multiple fields I'm a little stuck... Here is a LINQPad sample of what I want to do :
dim lFinal={new with {.Year=2010, .Month=6, .Value1=0, .Value2=0}, new with {.Year=2010, .Month=6, .Value1=2, .Value2=1}, new with {.Year=2010, .Month=7, .Value1=3, .Value2=4},
I have to perform the following SQL query: select answer_nbr, count(distinct user_nbr) from tpoll_answer where poll_nbr = 16 group by answer_nbr The LINQ to SQL query
I have a table that has a 2 part key; an ID column, and a version number. I'm trying to select 'only the latest version' of the records.I'm trying to use the expression style of LINQ, to achieve a GROUP BY, and pull out the aggregate MAX value of the Version. However no aggregation is taking place.
syntax of the LINQ query to use GROUP something BY something and select some fields of the datatable. i am having a datatable filled with some rows, i am trying to fill the datagridview with the GROUP BY query output of some fields.
Dim queryX = From m In db.Master Where m.Field = value Group Join d In db.Detail On m.Id Equals d.MasterId Into Group Where d.Field = value
In English, I want to join the master and detail tables, specifying conditions on each. But this causes the following compiler error:
"Name 'd' is either not declared or not in the current scope."
It works if I put this same condition in functional form:
Group Join d In db.Detail.Where(Function(x) x.Field = value)
but I think this is more typing, harder to understand, and introduces that irritating dummy variable. I really would prefer to use the query comprehension syntax. Is there a way to accomplish this?