Linq - Merge And Order 2 Lists Of Different Objects?
Mar 15, 2012
I have collections of 2 different types - let's call them Cars and Trucks. Both share base class Vehicle, which has property Passengers.I want to merge them into a single collection ordered by that property. E.g., merge Cars and Trucks and order by Passengers.
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
Right now I have a viewmodel that contains three lists of inputs; textboxinput, dropdownlistinput, and checkboxinput. Each of these lists is a list of input objects, which contain four values; paramenums, paramname, paramtype, and value. I am using these input lists to generate a variable number of fields on a form dependent on how many objects each list contains.
My current problem is that I'm not sure how to validate the variables in the list objects with fluent validation. I know how the behavior of each list should behave with regards to returning Nothing, but I don't know how to code that behavior with FluentValidation.
[Code]...
The thing I want to currently do is confirm that in every object in each of my lists, they all have a value attribute that isn't nothing. Can I do this by validating the input model? Right now, the code works at confirming that the list itself isn't null, but the objects in the list can still contain all null values. Is there a trivial way to do this? Alternatively, should I have set my code up differently?
I want to combine multiple lists of items into a single list, retaining the overall order requirements. i.e.:
1: A C E 2: D E 3: B A D
result: B A C D E
above, starting with list 1, we have ACE, we then know that D must come before E, and from list 3, we know that B must come before A, and D must come after B and A.If there are conflicting orderings, the first ordering should be used. i.e.
1: A C E 2: B D E 3: F D B
result: A C F B D E 3 conflicts with 2 (B D vs D B), therefore requirements for 2 will be used.
If ordering requirements mean an item must come before or after another, it doesn't matter if it comes immediately before or after, or at the start or end of the list, as long as overall ordering is maintained.
This is being developed using VB.Net, so a LINQy solution (or any .Net solution) would be nice - otherwise pointers for an approach would be good.
Edit: Edited to make example 2 make sense (a last minute change had made it invalid)
I'm trying to wrap my head about how to properly implement an OOP design for business objects that:
Have a "master list" in a database (ex. classifications)Are a part of another object as a property (i.e. object composition) but with additional properties
Here is where I'm stuck on the theory. Suppose that I have a Classification object, inheriting from the abstract class BusinessObject with the CRUD functions defined (MustOverride). This will give me:
[Code]...
What kind of other design could I implement here? It's obvous that I'm designing this the wrong way, but I don't see an easy alternative pattern. I don't want to repeat the code in the CustomerClassification class by not inheriting Classification and repeating all the field and property code, but I also don't want to expost CRUD functions to the CustomerClassification level. What am I missing in looking at the overall class design?
EDIT: Saving the classification level to the database will be handled by the customer object, because the database is legacy and the field for Level is defined in the customer table.
Suppose that I have more than one List (L1,L2,L3,L4) of instances of a class [code]Now I want to querry the 4 lists with one call like Dim L= (from P as MyClass in (L1,L2,L3,L4) where p.Datetime> XXXXX order by p.datetime select p).tolist..is it possible to do something like that? I Know that I could do a FOR NEXT loop with each list but i am looking for a way to do this with a single call
I have a function used to filter a list of options to return only those that are lot traced, and, when applicable, also only show items matching a specified pattern:
Private Shared Function FilterResultsLot(ByVal source As IQueryable(Of Item), _ ByVal itemCode As String) As IQueryable(Of Item) If HasFilter(itemCode, True) Then
I'm trying to create a LINQ query (or queries) that count the total number of occurences of a combinations of items in one list that exist in a different list. For example, take the following lists:
The result of the query operation should be 2 since I can find two combinations of AAA and BBB (from DiscountItems) within the contents of CartItems.My thinking in approaching the query is to join the lists together to shorten CartItems to only include items from DiscountItems. The solution would be to find the CartItem in the resulting query that occurs the least amount of times, thus indicating how many combinations of items exist in CartItems.When CartItems is filtered to only the items in DiscountItems, it can be visually displayed like this:
CartItems that get a discount ============================= AAA BBB <= This combination is eligible for a discount AAA BBB <= This combination is eligible for a discount AAA <= Not eligible
Thus, because there are 2 combinations of the discount in the Cart, the result is 2.Here's the query I already have, but it's not working. query results in an enumeration with 100 items, far more than I expected.
Dim query = From cartItem In Cart.CartItems Group Join discountItem In DiscountGroup.DiscountItems
I accept both C# and VB.NET suggestion, even though I'm writing an app in VB.NET I have two lists of intergers
List1 {1,2,3,5} List2 {2,4,6,7}
I want to have new List3 {4,6,7} which is composed of elements of List2 that are not in List1. I know I can write a nice For Each loop for this but I want it done in LINQ I've been looking for such methods at Enumerable Methods, but I can't find it.
This question is very similar to a previous question of mine, Use LINQ to count the number of combinations existing in two lists, except with some further twists.
I have a list of CartItems that can receive a discount based on the items specified in the list of DiscountItems. I need to be able to pull out the items in the Cart that can receive a discount and apply the appropriate discount specfied in the DiscountItem. The discount is only applied for each combination that exists. Here's what the two lists might look like to before the discount is applied[code]...
We are doing a query against an in-memory collection of LINQ data objects. The wrinkle is that we are ordering by a column in a related table whose records have not necessarily been loaded yet (deferred loading:)
Dim oPkgProducts = _ From b In oBillPkg.BillProducts _ Where b.Successful.GetValueOrDefault(Common.X_INDETERMINATE) = _
Assume I have an array myArray1 = { A, B, C, D, E, F, ., T}I have another that contains a subset of the elements of myArray1 but where the order may vary
Using VB.net and the following LINQ statement. I suspect the "Order by" does not work with Concat(). I want to list the current item the user has and then list more available items in asending order. So first i select the current item from the db and then select the next available items in order. LINQ is ignoring the order by statement and sorting by the PK (which is itemID) I examined the list immediately after executing the statement. When I break up the statement and do them separately they work as predicted.
(From items In myDatabase.ItemAssignments _ Where items.BuildingID = buildingID _ And items.ResidentID = ResidentID _
Same thing I am trying to do in the linq order by. It's not working.I have column that is defined in the data base as string (Varchar) and I need to cast/convert it to integer before I need to sort it.What should be my linq statement?
I have a Dictinary(Of String, Item) and I'm trying to sort it into alphabetical order by the item name. I don't want to use a sorted dictinary and without it, I've having zero luck. Linq is not my strong point.
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]
This works great and sorts on L_Name. But I am trying to allow the user to sort the gridview themselves so I am passing in the SortExpression as a string. But I don't know how to incorperate the SortExpression into the LINQ Query. I tried Order By c. & SortExpression but that did not work.
I have following code that creates Linq query. I've never used Linq until today and having problem with "Order By Clause"[code..]
If I run the code, I get following error.Name 'p' is either not declared or not in the current scope. How come p!Weight in "Select Clause" works but not in "Order By Clause"?
Dim gg = From gs In AllData_TableList Order By gs.Biology Descending, gs.ChemistryDescending, gs.English Descending, gs.Frensh DescendingAll I need is to make this Statement order Dynamically like this
Dim Variable1 as string=Biology Dim Variable2 as string=Chemistry Dim Variable3 as string=English
I am using a modal form with a datagridview in order to populate textboxes on a parent form. The datagridview is bound to an anonymous type resulting from a linq query, which varies depending on the textbox control whose keypress event is called. I always want to display a key value in column 0 of the datagridview (along with a variable number of additional columns), and then use that key value once the user selects a row.
However, when setting an anonymous type from a linq query as the datasource for a datagridview control, the columns are indexed alphabetically rather than in the sequence selected in the query. This requires setting the displayindex as a workaround, and then keeping track of which column contains my key value. I read elsewhere that this was something fixed in VS2008 SP1, but I still encounter the behavior.
I am using linq to fill a gridview with the information from an xml from code behind. I would like to order my Grid according to one of my elements in the xml ("value element").
gvResourceEditor.DataSource = (From resElem In resourceElements.Elements("data") _ Select New With { _ .Key = resElem.Attribute("name").Value, _ .Value = HttpUtility.HtmlEncode(resElem.Element("value").Value), _ .Comment = If(resElem.Element("comment") IsNot Nothing, HttpUtility.HtmlEncode(resElem.Element("comment").Value), String.Empty) _ }).OrderBy(?????)
myFilteredContractors = (From c In myFilteredContractors Join cc In myConClasses On c.ContractorId Equals cc.ContractorId Where inClassifications.Contains(cc.ClassificationId)[code].....
This is properly ordering this list of contractors by the number of classifications that they have.I also want to order them by whether or not they have a field set (CompanyOverview), which if is an empty string should be below those contractors who have set their CompanyOverview. Also, after the CompanyOverview is ordered I want to order by Registration Date.So it should order by:
Number of Classifications Whether Overview has been set (c.CompanyOverview) Registration Date (c.AppliedDate)
I have a LINQ to sql statement that joins 2 tables. I would like to add a order by clause on one of the columns. However the order by clause does not seem to take effect at all. right syntax in VB.net to achieve order by in the following:
Dim query = From dtIt In dbsomecontext.mytable Join dtIl In dbsomecontext.anothertable On dtIt.ItemID Equals dtIl.ItemID Where dtIl.IsAvailable = True Order By dtIt.manufacturer
I'm still trying to get my head around the whole "Lambda Expressions" thing.
Can anyone here give me an example ordering by multiple columns using VB.Net and Linq-to-SQL using a lambda expression?
Here is my existing code, which returns an ordered list using a single-column to order the results:
Return _dbContext.WebCategories.OrderBy(Function(c As WebCategory) c.DisplayOrder).ToList
Note: The WebCategory object has a child WebPage object (based on a foreign key). I'd like to order by WebPage.DisplayOrder first, then by WebCategory.DisplayOrder.
I tried chaining the order bys, like below, and though it compiled and ran, it didn't seem to return the data in the order I wanted.
Return _dbContext.WebCategories.OrderBy(Function(c As WebCategory) c.DisplayOrder).OrderBy(Function(c As WebCategory) c.WebPage.DisplayOrder).ToList
I am using LINQ queries inside a WCF service to return data to a Silverlight frontend. Problem is the columns being returned using LINQ are in alphabetical order and I want them the way they are ordered in the database instead. Does anyone know how to stop the alphabetical ordering of column names?