Error Querying When Nullable Types In Where Clause
Mar 1, 2012
I have the following NHibernate Linq query:
From eachLine In myNhSession(Of SamplePoco)()
Where eachLine.SampleIntField = 1234
The property SamplePoco.SampleIntField is type Nullable(Of Int32)
When I run the query, I get the following exception:
System.InvalidCastException: Unable to cast object of type 'NHibernate.Hql.Ast.HqlCoalesce' to type 'NHibernate.Hql.Ast.HqlBooleanExpression'
If I change the property type to Int32, it works. It seems that Nullable types are automatically converted into a coalesce expression by the Linq compiler.
Debugging the NHibernate, I just found out that this Where clause was converted into: {where ((eachLine.SampleIntField == 1234) ?? False)}. As I can understand, the whole condition comparison was translated to be coalesced instead of just the Nullable property.
If I put this way eachLine.SampleIntField.Equals(1234) it doesn't work as well ('Equals not implemented' exception)
If I change the query to the following code, it works:
From eachLine In myNhSession(Of SamplePoco)()
Where {1234}.Contains(eachLine.SampleIntField)
Another code that works as well (coalescing the field properly as I was expecting by the first query):
From eachLine In myNhSession(Of SamplePoco)()
Where If(eachLine.SampleIntField,0) = 1234
Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Click, Open.Click,Name.Click SelectVid.ShowDialog() End Sub
[code]....
I keep getting this error:
Error1'.' expected. Error2Handles clause requires a WithEvents variable defined in the containing type or one of its base types. Error 2 is also error 3
I am auto generating data grid and I am using check box in Data grid View,Now i am invoking check box state changed event but it produces the following error Handles clause requires a With Events variable defined in the containing type or one of its base types.
Here the code
Private Sub PRNT_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles PRNT.CheckedChanged Some Stuff. End Sub
I am in the processing of moving an app from VB to C# but some of the classes I will just be moving to VB dlls to access from the main C# app. In doing this I am trying to get the VB dlls to utilize the main C# class lib. In this C# lib I have an abstract clase called base process, it sets up a background worker and handles all the progress tracking, errors, and even reports an ETA. To use this in a derived class in C# you would just do this...
public class SomeLongProcess : Common.Multithreading.BaseProcess { public void start()
[code]....
The problem is that if I do the equivelant in VB I get an error "Handles clause requires a WithEvents variable defined in the containing type of one of its base types". Well I can't do a WithEvents in the base class because it is C# so..
i am getting errors on last two event handlers. what did i do wrong?
Error - Handles clause requires a WithEvents variable defined in the containing type or one of its base types.D:Shipping ApplicationShipping ApplicationForm1.vb75136Shipping Application Error - 'PrintDocument1' is not declared. It may be inaccessible due to its protection level.D:Shipping ApplicationShipping ApplicationForm1.vb1119Shipping Application
Just upgraded a VS 2005 ASP.NET 2.0 website to VS 2008 ASP.NET 3.5. There was an error on the Sub Button_Click. It seemed to be a minor error, the website and the button worked just fine, as usual. What does the error mean?
Protected Sub btnDEreports_Click(ByVal sender As
[code]...
Error 20 Handles clause requires a WithEvents variable defined in the containing type or one of its base types.
Im working on my first n-tier application. I am trying to serialize a structure and Im getting an error"Soap Serializer does not support serializing Generic Types : System.Nullable`1[System.DateTime]."Here is the structure that is being serialized Namespace Structures
<Serializable()> _ Public Structure structAllergy Public AllergyID As String Public ProfileID As String
[code]....
The bold line is the line that is throwing the error.
I have: Dim nVar1 As Long?Dim nVar2 As Long?Dim nVarSum As Long?nVar1 = Nothing nVar2 = 5 nVarSum = nVar1 + nVar2 I would prefer the result to end with nVarSum being 5, instead of Nothing. I understand if you add something to an unknown value, you will end up with "somthing + unknown" or x+5 will always equal "x+5" not "5" because you are still carrying around that unknown "x". However, how can I effectively treat an unknown or Nothing as a zero for the purposes of addition in this case?(What is basically happening is that the end user is sending us a data file, this code parses that file and then sums together about 15 fields. If the user leaves those fields blank instead of assigning a zero to them, I need to treat it as if it was a zero for this one addition operation, but all the rest of the code needs to continue seeing it as a Nothing value since the user did not ACTUALLY submit zero... they submitted blank or nothing)
I'm converting an Access VBA app to VB.NET. It has dates defined as variants or objects to handle null values. I thought this would be a great chance to use the Nullable type. But I can't get it to work. Either it is inappropriate for what I am trying to use it for, or I am doing it wrong. Anyone know how to use it? Reader is a SqlDataReader.
[Code]...
I was hoping I didn't have to put a lot of If .. Null statements throughtout the code, but that is my only option unless someone has any other idea.
C#'s 'as' keyword will let you do this: int? input = value as int? Here's what I would assume the vb.net equivalent would be: Dim input As Integer? = TryCast(value, Integer?) There's an intellisense error in the TryCast stating the operand must be a reference type but Integer? is a value type.
Intellisense on Nullable(Of Integer) says 'Represents an object whose underlying type is a value type that can also be assigned null like a reference type.' It seems C#'s 'as' handles this like a reference type where TryCast doesn't have this built in. In VB10 I was able to take advantage of the new CTypeDynamic function to do the casting. Conversion.CTypeDynamic Method
Dim input As Integer? = CTypeDynamic(Of Integer?)(value)
Or:
Dim input As Integer? = CTypeDynamic(Value, GetType(Integer?))
There's a cost here as CTypeDynamic examines the type at runtime.
My question is what is the elegant way to handle this without CTypeDynamic?
Dim input As Integer? = TryCast(value, Integer?)There's an intellisense error in the TryCast stating the operand must be a reference type but Integer? is a value type.Intellisense on Nullable(Of Integer) says 'Represents an object whose underlying type is a value type that can also be assigned null like a reference type.'It seems C#'s 'as' handles this like a reference type where TryCast doesn't have this built in.
I have recently been working on a number of sections of code that deal with the insertion of Nullable types into a database. As I'm sure anyone who has dealt with similar code will be aware of the annoyance of constantly writing conditional logic to deal with the insertion of nulls into a database. I.e.: MyValue.HasValue ? MyValue.Value : DBNull.Value; If(MyValue.HasValue, MyValue.Value, DBNull.Value) Basically I am just wondering why DBNull.Value exists and why Null simply couldn't be used?
I have a class that implements a range of numbers....call it NumericRange(Of T). Internally, NumericRange stores T as a Nullable, T?. I have another class that wraps this class as NumericRange(Of UInt16). Call this class MyNumRange (I'm being simplistic here). So In MyNumRange, I have a few constructors defined:
I'm trying to do something similar to what's described here, but with nullable types.
[URL]
int availableUnits = unitsInStock ?? 0;
In VB, it would be this:
Dim availableUnits As Int32 = If(unitsInStock, 0)
However I'm working with db columns, which could be DbNull, and nullable types, which can be Nothing (which is different to DbNull). If a column is DbNull, I want to return Nothing, otherwise return the value. For eg:
Dim availableUnits As Int32? = If(myDataReader("UnitsInStock").Value, Nothing)
The error I'm getting is "Specified cast is not valid" but I'm not sure why. I've tried this as well:
Dim availableUnits As Int32? = If(isDbNull(myDataReader("UnitsInStock").Value), myDataReader("UnitsInStock").Value, Nothing)
Which is messy and just results in the same error. The only thing that works is this:
Dim availableUnits As Int32? If isDbNull(myDataReader("UnitsInStock").Value) Then availableUnits = myDataReader("UnitsInStock").Value Else availableUnits = Nothing End If
Which is just silly. Is there a better way of getting nullable db values into nullable variables that I'm not aware of?
I'm using my data objects in a crystal report. The thing is, when I select my object, it gets added to the field explorer table. My properties are listed except for the Nullable Type properties. Why would this happen. I've had quite a few issues yesterday as this is my first attempt at a crystal report in .Net. I thought I worked around them but now I've hit this snag.
When i add num1 and num2 as above, compiler gave error that -- Operator + is not defined for types "type" and "type".How to define the meaning of '+' or any other operator in such situations?
Is there a technical reason why there is no implicit conversion from DBNull to the various nullable and/or sql types? I understand why the conversions don't currently happen, but don't understand why an implicit conversion wasn't created at the time or added in subsequent versions of the framework.Just to be clear, I'm looking for technical reasons, not "because that's they way they did it" or "I like it that way".
I have written an application which manages some bookings, and want to use Crystal Reports to provide the reporting engine. I have used it before with datasets with no problems.
I am using EF4, and have a LINQ query and report datasource assignment as below:
Code:
Dim ActiveCustomers = From Customer In FMEntities.Customers Where Customer.Status = 1 Select Customer
[Code].....
I have read up that I may need to convert the incoming data, but I am confused as to what it needs to be converted to. Should it be a datatable?
Handles clause requires a WithEvents variable defined in the containing type or one of its base types.
in the following code..
Public Sub selCurrentManuf_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles selCurrentManuf.SelectedIndexChanged End Sub
I created a lable to handle DateTime = Now, It works fine. but when I moved it inside a FormView I Get the following Message. Handles clause requires a WithEvents variable defined in the containing type or one of its base types?
Quote:Handles clause requires a WithEvents variable defined in the containing type or one of its base types.
That error is on both of these, in blue
Private Sub SpellChecker1_DeletedWord(ByVal sender As Object, ByVal e As NetSpell.SpellChecker.SpellingEventArgs) Handles SpellChecker1.DeletedWord 'save existing selecting
[code]....
I have added the reference, I have also added them to the toolbox. My dictionary is all set. What did I miss?
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.
IErrorInfo.GetDescription failed with E_FAIL(0x80004005).I get this error when trying to send a query to a database. Its an access 2000 DB. Google suggests the error indicates that I am using a vb keyword as a field name or table name. I have checked with these here and can't see anything that matches.
I have some sql statement error while querying the DB and to display the result on a data grid view. Could someone check the codes below and let me know the problem with the codes.
Dim cm As New System.Data.OleDb.OleDbCommand Dim rd As System.Data.OleDb.OleDbDataReader Dim Conn As OleDbConnection