Linux中的Linq查询

时间:2016-07-27 20:18:19

标签: vb.net entity-framework linq

美好的一天,

我正在使用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并返回结果,当列中的某些行具有空值时。

任何帮助都会很棒。

1 个答案:

答案 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; 
        }