Dynamic Linq .OrderBy In .Net Not Accepting Strings?
Jun 20, 2012
I'm having a problem implementing Scott G's Dynamic.vb extension at [URL] in my vb solution. I've searched StackOverflow (80+ Q&As) and numerous other sites without much luck. I'm using VS 2010.I've included Dynamic.vb in a problem with no root namespace, and then added a reference to that project in my main one. I'm getting intellisense for 4 overloads (rather than 2) so I'm pretty certain that the extension is in scope.I was having a tough time with clauses, especially the OrderBy as Scott demonstrated. If I simply pass a string as Scott's VB example did I get the error "Overload resolution failed because no accessible 'OrderBy' can be called with these arguments."
The line of code is:
Dim FilteredComponentList = From Component As MX.Component In ComponentList.AsQueryable _
.OrderBy("Name")
So I found other references that stated to pass a Lambda expression. So I tried this and at least I get no error, even if the sort function still doesn't seem to work. Here is the code that compiles and executes.
Private Sub SortByColumn()
If Not cmbComponentFilter.SelectedItem.ToString = "All" Then
Dim FilteredComponentList = From Component As MX.Component In ComponentList.AsQueryable _
[code]....
When I interrogate the dgvComponents.Columns(e.ColumnIndex).Name it gives the objects property I wish to sort by, but the sort still isn't working. I'm concerned why I can't get Scott's implementation to work, but I've heard his keynotes and read his blogs, so I'm guessing the problem lies with my implementation.
I'd like either to work but need to understand why as well. Why doesn't passing a string work? Isn't the PARAMARRAY declared in the function optional?
I have users check off lab facilities in a UI. I want to use linq to fetch corresponding records for all of the labs that they have checked off. Basically,
Dim myRecs = (From l As EpiData In myDataContext.EPIDatas Where l.facility= _ one of the checked labs
So basically, I need to write a linq query where the "strings" to match are determined at runtime. Is there any way to do this easily? I know that there is a library out there called dynamic LINQ, but (1) it's in C# and I'm writing in VB (2) I'm really just looking for a single, simple solution for this single case.
I have a method in a webservice that has parameter with which users can decide how they want to order their results. This is a List(Of String) with the names of the fields in the order they want to sort them. I know I can normally order on multiple columns by doing the following
Dim test = Bars.OrderBy(Function(x) x.Foo) _ .ThenBy(Function(x) x.Bar) _ .ThenBy(Function(x) x.Test)
However in this case this won't work since I can't chain the ThenBy function because I'm adding the sorting orders in a loop. To use ThenBy I need an IOrderedQueryable collection. This is how I would want it to work
Dim sortColumns = {"Foo", "Bar", "Test"} Dim query = From b in Bars For each column in sortColumns Select Case column Case "Foo" query = query.Orderby(Function(x) x.Foo) [Code] .....
I need to represent the following query using LINQ:
DECLARE @PurchasedInventoryItemID Int = 2 DECLARE @PurchasedInventorySectionID Int = 0 DECLARE @PurchasedInventoryItem_PurchasingCategoryID Int = 3 DECLARE @PurchasedInventorySection_PurchasingCategoryID Int = 0
[code]....
Now, I know that a query in .NET doesnt look like this, this is my test in the SQL Design Studio. Naturally VB.NET variables will be used in place of the SQL local variables.My problem is this: All of the conditions after "WHERE" are optional. In that a query might be made that uses one, some, all, or none of the conditions. V.PropertyID and V.Value can also appear any number of times.In VB.NET I can make this query easy enough by simply concatenating strings, and using a loop to append the "V.PropertyID/V.Value" conditions.I can also make a Stored Procedure in MS SQL, which is easy enough.However, I want to accomplish this using LINQ.
Forgive my ignorance on this.I have this LINQ Query:Dim ngBikersDataContext As New CarBikeWalkDataContext
bikersList = (From c In ngBikersDataContext.Reg_Bikers _ Order By c.L_Name _ Select New Bikers() With { _ .BikerID = c.BikerID, _ .F_Name = c.F_Name, _
[Code]...
with the error "Overload resolution failed because no accesible 'Select' accepts this number of arguments." Over the "NEW" I get an error " ')'expected."
I'm working on something relatively simple I am trying to create a dynamic amount of comma separated strings.I have a variable (numberOfStrings) which is the number of different strings I need.I just want to loop thru the aryDrivers and assign then to the different strings.Dim aryHeats(numberOfStrings - 1) As ArrayList
Dim aryDrivers() As String aryDrivers = txtBatch.Text.Split(",") For i As Integer = 0 To aryDrivers.Length - 1 For j As Integer = 0 To aryHeats.Length - 1 aryHeats(j).Add(aryDrivers(i) & ",") Next
[i][b]I have always developed apps for desktops with an access database on one server for one company or sql server. I had one connection string. Now I am in a situation with multiple clients using my software on their own server. This means different connection strings can anyone suggest an efficient way to do this without changing connection strings for each server throughout the application?[/b][/i]
I have been trying the following but it returns unexpected results:
Dim xd As XDocument = _ <?xml version="1.0" encoding="utf-8"?> <root>
[code].....
The above result returns both 'element' nodes however it should only return the first where element/subelement@id=1/subsubelement@id=3 However if results.Ancestors. is used it returns the correct 'subelement' and if that line is not included it returns a single 'subsubelement' whih is also correct I don't understand why when mvoing to the 'element' it returns both (I realise both have a subelement with id=1 but I thought each further query would filter out the presvious results)?
UPDATE: Groo's answer was marked correct as it would be a good alternative. I decided to stick with the select/switch statements to avoid the performance issues of using reflection. As far as I can tell there is no way to do what I want without using Dynamic LINQ (and reflection) or a decompiler (to manually code each LINQ statement, which I am already doing by hand). Note: to make this update DropDownList16 through DropDownList20 were removed (needed the characters).Is there a way to abstract the building of a dynamic Linq to SQL query?
I am trying to build a Linq to SQL query with a dynamic where clause, based on user supplied filters. The user needs to be able to filter strings, integers, and dates using advanced options (equal, not equal, contains, starts with, etc). The user needs to be able to use these filters with as many or few columns as desired.
Dim query=Form f in BBSDb.Forms order by f.FormID Descending Select f where I want the f.FormID to be able to replace with a variable..What I mean is.. it doesn't have to f.FormID .. I may want to set f.FormName to be in descending for example using the code dynamically.. Is there anyway to achive?
I want to write a query that the "where" in the query is a string something like"
Dim query as string= "Name =xxxx and Date > 10 " Dim t = from book in doc.Descendants("books") Select _ [Name] = book..value, [Date] = book..value.... Where (query)
This is an extension of my last question which was answered, so I am starting a new thread. I have a query in LINQ that I was given to trim down the columns of a datatable. This works well, however, I need to make the LINQ query dynamic. So the query below:
Dim qColumnsIWant = From row As DataRow In inDT.AsEnumerable() _ Select _ EPN = row.Field(Of Integer)("EPNID"), _ EPNID = row.Field(Of String)("EPNNumber"), _ Ingot = row.Field(Of String)("Ingot"), _ ShopOrder = row.Field(Of String)("ShopOrder")
I've been using LINQ so much in the last couple of weeks that when I had to write a one line function to remove < and > from a string, I found that I had written it as a LINQ query: [code] My question is, is it better to do it with LINQ as above or with StringBuilder as I've always done, as below: [code] Both work, the second one is easier to read, but the first one is designed for executing queries against arrays and other enumerables.
I have been looking into dynamic querying of datasets and the use of copytodatatable() for a project. I have seen in alot of forums that the copytodatatable functionality is unusable as it was removed. have an example of a dynamic Linq query being loaded into a datatable.
Dim q = From definition In definitionList _ Where definition.ValueDefName.Contains(criteria)[code]....
I have already looked into this answer: LINQ - dynamic WHERE clause?Unfortunately, it doesn't work for me using .net 4.0. When I attempt to pass the criteria string in it ask for a predicate. The end goal is to add any of these:
to be passed into the query depending on what checkboxes the user has selected. How can I create a dynamic where clause in linq to sql? Is there new syntax for passing in a where clause as a string?
1) I am begginner to dynamic Linq and having serious trouble creating expression tree after WHERE
say.: items.Category_ID=4
I tried to construct it like: Dim products = From items In mydatacontent.Products
Dim AA As ParameterExpression = Expression.Parameter(GetType(String), "items")
Dim left1 As Expression = Expression.Property(AA, GetType(String).GetProperty("Category_ID")) here is the error Dim right1 As Expression = Expression.Constant("4") Dim BB As Expression = Expression.Equal(left1, right1)
I'm trying to implement multicolumn filtering using LINQ expressions in a class that extends BindingList(Of T). Here is the relevant code:
Public Function GetFilterPredicate() As Func(Of T, Boolean) Dim expressionList As List(Of Expression) = New List(Of Expression) For Each item as FilterInfo in _FilterList
[code]....
However, an exception is thrown at the Expression.Call statement. I can't quite figure out the right arguments to supply. As it is now, I am getting this error when I run the code:
InvalidOperationException was unhandled:No generic method 'Equal' on type 'System.Linq.Expressions.Expression' is compatible with the supplied type arguments and arguments. No type arguments should be provided if the method is non-generic.
I have a listbox that is dynamically filled by certain values depending on what table has been selected from another list box. Once a value is selected, it is being graphed vs a date & time range. With my ignorance of linq: depending on what value is selected, the linq to sql statement I need to create to grab data from my database is different as I can't use an index on an anonymous type.
result = From t In db.APS _ Where t.DateTime >= startDate And _ t.DateTime <= finishDate And t.Weight = weight _ Select t.DateTime, t.TotalConcentration
t.TotalConcentration should be selected if my listbox value is "Total Concentration", but if it's something else, like "Temperature" or "Flow Rate" (connected to appropreate database columns) - this method obviously isn't going to work. I need to be able to dynamically select a specific column from the anonymous type list, or use some other method I'm unaware of to do this.