0

LINQ クエリ内で通常の SQL LIKE %% 演算子を使用する際に助けが必要です。

これはTypeという行のデータです(like 演算子を使用しない通常のクエリから返されます)。

Independent Contractor
Lease Program 
Teams
Teams interested

そして、これは私の(試みられた)LINQクエリです:

Public Shared Function SelectActiveByState(
    ByVal state_abbr As String, 
    ByVal catagory As String) As List(Of theLocations)

    Dim db As New MasterData
    db.CommandTimeout = 240

    Try            
        Return ( _
            From hl In db.Locations _
            Where hl.Active = True _
            And ( _
                hl.State = state_abbr Or _
                hl.AlternateLocation.Contains(state_abbr) And _
                hl.Type.Contains("/" & catagory & "/") _
            ) _
            Order By hl.Type Select hl).ToList()

    Catch ex As Exception
        Return Nothing
    End Try
End Function

And hl.Type.Contains("/" & catagory & "/")を省略した場合、クエリは正常に機能します (4 つのレコードを返します)。しかし、その部分を追加すると、 like 演算子に関係なく同じレコードが返されます。

4

2 に答える 2

2

それ以外の

hl.Type.Contains("/" & catagory & "/")

これを試して:

SqlMethods.Like(hl.Type, "%"& category &"%") 

編集

私は VB.Net 構文が苦手です。

編集:

実際、LINQ クエリの結果の sql は次のようになります。

SELECT *
FROM   myTable
WHERE  State = state_abbr OR
       AlternateLocation LIKE state_abbr AND
       Type LIKE category

しかし、あなたはこれが必要だと思います:

SELECT *
FROM   myTable
WHERE  (State = state_abbr OR
       AlternateLocation LIKE state_abbr) AND
       Type LIKE category

これを試して:

Return ( _ 
    From hl In db.Locations _ 
    Where hl.Active = True _ 
    And ( _ 
        (hl.State = state_abbr Or _ 
        hl.AlternateLocation.Contains(state_abbr)) And _ 
        SqlMethods.Like(hl.Type, "%"& category &"%") _ 
    ) _ 
    Order By hl.Type Select hl).ToList()
于 2012-09-18T14:30:21.840 に答える
0

@Yaqub Ahmadコードのいくつかを使用してそれを理解しました:

Public Shared Function SelectActiveByState(
    ByVal state_abbr As String, 
    ByVal catagory As String) As List(Of theLocations)

    Dim db As New MasterData
    db.CommandTimeout = 240

    Try            
        Return ( _
            From hl In db.Locations _
            Where hl.Active = True _
            And ( _
                (hl.State = state_abbr Or _
                hl.AlternateLocation.Contains(state_abbr)) And _
                System.Data.Linq.SqlClient.SqlMethods.Like(hl.Type, "%" & category & "%") _
            ) _
            Order By hl.Type Select hl).ToList()

    Catch ex As Exception
        Return Nothing
    End Try
End Function
于 2012-09-18T15:05:38.943 に答える