Asp.net - Reference Property Of An Unknown Type In Lambda Function
May 18, 2011
I'm trying to create a generic function to build a Linq expression from a list of Telerik grid filters. I'm trying to stay clear of dynamic Linq. Because I don't know the type that I'm building the expression for, I'm attempting to use reflection in the lambda functions to refer to a property, but after applying the fix suggested by @JaredPar I get the error, "The LINQ expression node type 'Invoke' is not supported in LINQ to Entities." Is there any way around this? here is my code:
Public Shared Function buildRadFilter(Of T)(ByVal filterExpression As List(Of GridFilterExpression)) As Expressions.Expression(Of Func(Of T, Boolean))
Dim returnPred = PredicateBuilder.True(Of T)()
Is it possible to shorten the following function to a lambda expression?Or (to do the trick by myself) what is the best and most understandable for beginners tutorial for lambda in vb.net?[code]
I have a generic Class I'm using to hold information loaded from a database.I have a method which takes a DataRow as an argument, uses the object's known column name and extracts the data from the DataRow, such that:Dim loadData As T = CType(myDataRow("myColumnName"), T))works as my default assignment in most cases.Unfortunately, due to some horrifying design constraints, some of my columns may be null, and may also be taken from enumerations.This means that when <T> is Nullable(Of SomeEnumeration) the above code does not work because I can't cast 0 directly to SomeEnumeration.Zero.Is there some way to check whether <T> is Nullable(Of [Enum])? Or some way to write a method which allows Integers to be cast to Nullable(Of [Enum])?I feel like I'm forgetting something that would allow me to write one of the other of these, but my weak google-fu is turning up nothing.
EDIT: Okay, thanks to dasblinkenlight's answer below, I can detect when this circumstance is occurring, but what I need to do now is to take a type <T> which I know is Nullable(Of SomeClass), get a type reference to SomeClass and then create a new object of type Nullable(Of SomeClass) and assign that to LoadData.My problem was that I had a lot of difficulty in finding any function which would accept baseType as an actual Type.Parse accepted baseType as a parameter, I knew baseType was an [Enum] type because of dasblinkenlight's code, so I was, in this instance, able to code a solution. It's a solution which is very specific to my problem (i.e., T is Nullable(of SomeEnumeration)), but it's a solution nonetheless.
But if my attribute list null. The lambda throws null reference.Is there any way to check for null reference in lambda ? Or is there a better way to rewrite the above linq query ?
I am trying to create a Sub that can take an object and add a load of event handlers for it, but the object can be any one of N types that all have these events. How can I do this? If I just have it as an Object as below AddHandler complains that the event does not exist for Object.
Rather than giving the very specific case (which I did earlier), let me give a general example. Let's say that I have a function, called callingFunction. It has one parameter, called parameter. Parameter is of an unknown type. Let us then say that I wish to copy this parameter, and return it as a new object. For example, in pseudo code, something along the lines of...
[Code]...
EDIT: Additional Information The first time I posted this question, I received only one response - I felt that perhaps I made the question too specific. I guess I will explain more, I have an ASP page with 10 tables on it. I am trying, using the VB code behind, to come up with a single solution to add new rows to any table. When the user clicks a button, a generic "add row" function should be called.
The difficulty lies in the fact that I have no guarantee of the contents of any table. A new row will have the same contents as the row above it, but given that there are 10 tables, 1 row could contain any number of objects - text boxes, check boxes, etc. So I want to create a generic object, make it of the same type as the row above it, then add it to a new cell, then to a new row, then to the table.
I have this function that maps a IDataReader to a class. It is obviously written in C#. My co-worker wants to use the same method in his code, but he is writing in VB.net. Basically I am having difficulty rewriting this due to the Lambda expressions used in C#. He is running .Net 3.5.
I have a problem with VB9 and Moq.I need to call a verify on a Sub. Like so:logger.Verify(Function(x) x.Log, Times.AtLeastOnce)And my logger looks like this:
I get the following string expression provided:"ChildObject.FullName" ...where ChildObject is an instance property on the MyObject1 type.ChildObject has a property named "FullName" and I want to sort a collection of type "MyObject1" based on this child properties "FullName" value.
I can do this all day long on properties directly on MyObject1 but I run into 2 challanges when doing it on a child instance and I can't get all the pieces working. The main 2 challanges are:
MyObject1 has a few different child property types so I can't hardcode the type for ChildObject. The string could be of any type.The sort expression is a String and not a known type.Above the value returned from the last line in the expression (if I run the code outsode the OrderBy method, does provide me the 'FullName' information I need. So the code must be close, but it still does not work.
Any ideas on how I can accomplish this? What I am trying to prevent is hardcoding a series of 'If' blocks on the child's type to then hardcode in its type to the sort or OrderBy method.
I have problem in my application when updating 3 items otherwise it is as good as work. The problem is when updating the username to the access database an error showing that "Datatype mismatch" when updating the date and time field an error occurs and tells that the "Unknown field type". This is my code where bold faced lines have errors:
Dim objCmd As OleDb.OleDbCommand = New OleDb.OleDbCommand() objCmd.Connection = con.con 'Make a command to insert data
I have recently moved from VB 2003 to VB 2005. While I am finding a lot of the new features quite useful, I am having trouble with List (of T). I want to be able to do something like this
Function GetList(MyObjectType as Type) as datatable Dim list as new List(of MyObjectType) End Function Function GetList(MyObjectType as String) as datatable Dim list as new List(of GetType(MyObjectType)) End Function
VB 2005 does not allow me to do this at all. Must the "type of" be srongly declared at all times? Can't this be done dynamically?
Should I be concerned about the performance of the Compile method here?[code]...
The reason I want the lambda expression is because I want that function to be able to get all the way through LINQ-to-SQL to be converted to SQL. The reason I want the direct version is because I have other code that I want to validate individual serial numbers before submitting changes. And I fear that GetValidSerialNumbers.Contains(serialNumber) will execute a more-complex-than-necesssary query.
I have a type lets call it "MyType". I have a List(Of MyType). Here is what i'm doing: MyList.Sum(Function(x) x.MyFieldToTotal) "MyFieldToTotal" is a decimal. For the life of me i can't figure out why x above is an object rather than a type of "MyType". Shouldn't Type Inferencing be working in this case? Even in intellisense i get "selector as System.Func(Of MyType) as Decimal"
I'm trying to sort a list of string, which (each item) consists of a word followed by a space, then a number. I want to sort first alphabetically by the word, then numerically by the number. I tried something like this: wordList = wordList.OrderBy(Function(x, y) CStr(x.Split(" "c)(0)).CompareTo(CStr(y.Split(" "c)(0)))).ThenBy(CInt(x.Split(" "c)(1)).CompareTo(CInt(y.Split(" "c)(1))))
I have a code below to make collection that bind to a gridview able to sort by clicking on the column header. The problem here is "IPerson" is unknown at compile time. I want the delegate type able to decide by getting from gridview datasource.[code]....
I have written a function to generate a random string with specified length. In that I have used 'Random' function. when I have executed it, it is throwing an unhandled exception.Please suggest me some solution. Below is the code I have used:
I have recently updated a legacy compact framework application to support Windows Mobile 6.5 but after going through my backwards compatability testing I have an issue with the WinCE 5 device.When attempting to run the application from both the EXE and the debugger I get the "An unhandled exception of type 'System.TypeLoadException' occurred in Unknown Module." exception but its not giving me any idea which dll / type it has issue with.The changes do work on the Windows Mobile 6.5 Motorola device and the Pocket PC 2003 Psion Device but not on the WinCE5 Psion device.Does anyone have any ideas how I can find out which reference is causing me the issue. I have tried removing the new references to the Symbol barcoding and imaging libraries but I am still getting the same error.OK, it looks like the .Net Compact Framework installation had corrupted some how. I flattened the device, reinstalled and everything appears to be working.
I'm trying to check if a LINQ Entity exists in its table, but at design time I dont know what type that entity is. So I figure I'll just get the table, and try the Contains method on it. But I cant get the table in such a way that I can query it at design time.I've tried the GetTable method on the datacontext, but I dont know how to cast it to the appropriate type when using GetTable(Of). GetTable(Type) works, I just use Entity.GetType(), but then I don't know how to query the ITable thats returned.To try and cast the ITable to something useable, I created an interface(IWhatever) that could implement properties that are native to all of my entities I would encounter. [code]
System.ExecutionEngineException was unhandled Message: An unhandled exception of type 'System.ExecutionEngineException' occurred in Unknown Module.There are no further details and the stack trace window is blank I was just wondering how it would be best to work out where this error message is happening - i really don't want to put a million debug.prints in there to work out what functions were last called etc.
Using Access 2003 and VB code, I have created a form with a number of labels. The labels will display an employee's names. I have named the labels name1, name2, name3...etc. Using an ADO data set and DCount I have determined the number of names in an Access table (the number of names can vary). What I want to do is for each record in succession to pick the first name and surname from the data set , combine them into a full name (this part has been successful), and then set the full name into the label caption in succession. Example: full name 1 into name1, full name 2 into name2, full name 3 into name3... until all names appear as labels on the form.
I created a counter to and a variable to increment the label number but when I address the caption property of the variable containing the new label (e.g. name1, name2..etc.) it throws an errer at runtime. Here is the code:
I'm trying to use a nested multi-line lambda Function in VB.NET and am getting an error. Here's what my code looks like:
cartItems = cartItems.Select(Function(ci) New With {.CartItem = ci, .Discount = discountItems.FirstOrDefault(Function(di) di.SKU = ci.SKU)}) .Select(Function(k) If k.Discount Is Not Nothing Then
In VB.NET, if I create a class it is a reference-type. But, if that class it chock full of value type properties, how is this handled? If the class is instantied but never filled, I suspect a pointed for to the heap is allocated. But is more space allocated on the stack for all of it's value type properties?