将linq转换为sq查询到linq到实体

时间:2014-03-14 14:33:51

标签: vb.net linq-to-sql linq-to-entities

我有这个linq to sql查询我想转换为linq到实体

Dim db As New DataClasses1DataContext()
Dim bedspace = (From bed In db.Beds Where SqlMethods.Like(bed.BedName,"ward%")
                Select Convert.ToInt32(bed.BedName.Substring(4))).ToList()

If bedspace.Count <> 0 Then
    txtProvisonalDiagnosis.Text = bedspace.Max
Else
    txtProvisonalDiagnosis.Text = "try again"
End If

查询有效,但在尝试使用此类实体实现相同的功能时

Dim bedspace = From bed In HMS.Beds Where bed.BedName.Contains("ward")
                    Select Convert.ToInt32(bed.BedName.Substring(4).ToString)

If bedspace.Count <> 0 Then
    txtProvisonalDiagnosis.Text = bedspace.Max
Else
    txtProvisonalDiagnosis.Text = "am still a sucker"
End If

编译器抱怨LINQ to Entities无法识别方法&#39; Int32。 ToInt32(System.String)&#39;方法,并且此方法无法转换为商店表达式。请帮帮我。

3 个答案:

答案 0 :(得分:1)

数据库不知道函数Convert.ToInt32,但您可以使用AsEnumerable()将数据移动到内存中并在那里进行转换。如果我正确地记住了我的VB(我很可能没有),那应该这样做;

Dim bedspace = 
  (From bed In HMS.Beds Where bed.BedName.Contains("ward") Select bed.Bedname)
   .AsEnumerable()
   .Select(Function(bedname) Convert.ToInt32(bedname.Substring(4).ToString))

答案 1 :(得分:0)

尝试类似这样的东西,我附近没有编译器,但这不太可能

Dim bedspace as generic.list(of integer) = (From bed In HMS.Beds Where bed.BedName.Contains("ward")
                Select bed.BedName.Substring(4).ToString).tolist

If bedspace.Count <> 0 Then
    txtProvisonalDiagnosis.Text = bedspace.Max
Else
    txtProvisonalDiagnosis.Text = "am still a sucker"
End If

答案 2 :(得分:0)

我只是这样做,编译器没有再抱怨。

  Dim bedspace = From bed In HMS.Beds Where bed.BedName.Contains("ward")
                    Select CType(bed.BedName.Substring(4), Integer)



    If bedspace.Count <> 0 Then
        txtProvisonalDiagnosis.Text = bedspace.Max
    Else
        txtProvisonalDiagnosis.Text = "am still a sucker"
    End If