2014-04-03 65 views
2
Dim objModel As New HireBPCEntities 
Dim SuspenseEntry = From M In objModel.tblSuspenseEntries Where strIDsToApprove.Contains(M.ID) 

For Each Entry In SuspenseEntry.ToList() 

    Dim tblSE As tblSuspenseEntry = DirectCast(Entry, tblSuspenseEntry) 
    tblSE.Exclude_YN = "N" 
    //Some other code 
    objModel.SaveChanges() 
Next 

這裏strIDsToApprove是逗號sep值。 即strIDsToApprove = 「1,2,4,7」 或有時稱爲strIDsToApprove = 「12」(用戶可以選擇一個或多個記錄)使用「In」子句實體框架

我的問題是當 strIDsToApprove = 「12」 然後變LINQ 3個記錄用ID 1,2 AND 12如果我在上面的代碼中使用Contains。我只 - 在這種情況下需要使用ID「12」的記錄。

這相當於SQL SELECT * FROM tblSuspenseEntry 其中ID(12) ,可呈現給一個行回來ID = 12

缺少什麼我在這裏?如何使用實體框架編寫「IN」子句。

+3

'strIDsToApprove'應該是整數的解析數組,而不是字符串。 – asawyer

回答

0

將M.ID字段的數據類型與strIDsToApprove匹配。混合和匹配整數和字符串會導致這類問題。

1

Contains方法的作用與sqlIn關鍵字相同。

Dim matches() As Integer = {1, 2, 12} 
Dim query = tblSuspenseEntry.Where(Function(o) matches.Contains(o.Id)).ToList()