美好的一天,
我正在使用Linq查询我的数据库,我遇到了一个问题,查询在列中搜索了一个搜索短语,并根据列是否有短语,然后返回结果,查询在下面,
Dim pdb = New ProductDataContext()
Dim query =
From a In pdb.tblUSSeries
Join b In pdb.tblSizes_ On a.Series Equals b.Series
Where
a.Series.ToString().Equals(searchString) Or
b.Description.Contains(searchString) Or Not b.Description.Contains(Nothing)
Order By b.Series, b.OrderCode Ascending
Select New CustomSearch With
{
.Series = a.Series,
.SeriesDescription= a.Description,
.Coolant = a.Coolant,
.Material = a.Material,
.Standard = a.Standard,
.Surface = a.Surface,
.Type = a.Type,
.PointAngle = a.PointAngle,
.DiaRange = a.DiaRange,
.Shank = b.Shank,
.Flutes = b.Flutes,
.EDPNum = b.EDPNum,
.SizesDescription = b.Description,
.OrderCode = b.OrderCode
}
Return query
我认为问题在于,在表中某些行是NULL,所以当它检查列的短语并且它遇到一个为空的行时,会中断并返回此错误,
演员价值类型' System.Int32'失败,因为具体化值为null。结果类型的通用参数或查询必须使用可空类型。
我已经针对另一个列运行了此查询,该列包含填充了数据的所有行,并且返回结果确定。
所以我的问题是如何在VB中编写它以使用提供的searchstring查询db并返回结果,当列中的某些行具有空值时。
任何帮助都会很棒。
答案 0 :(得分:1)
进行投影时会发生异常(即选择新的CustomSearch) 是的,你试图将Null分配给某个int属性 (不确定你的哪一个属性)
两种选择之一:
1)将nullalbe类型用于您的属性(或仅使用该属性)。
2)项目内联If(??在C#中),我不知道VB所以不要抓住我的语法。
以系列为例,我不知道它是否是一个int或者是否是有问题的属性
Select New CustomSearch With
{
.Series = If(a.Series Is Nothing,0, CInt(a.Series))
}
In C#
Select new CustomSearch
{
Series = a.Series ?? 0;
}