2012-03-04 110 views
0

我試圖將幾個搜索參數傳遞給一個LINQ表達式來檢索包含其中一個搜索項的所有條目。LINQ to SQL中的多個參數

例子:這裏

Dim query = From p In db.BEW_PROFIL 
    For Each searchItem As String In searchItems 
     Dim item As String = searchItem 
     query = query.Where(Function(p) p.NAME = item) 
    Next 

問題是我不得到任何結果,因爲Where子句看起來與該代碼是這樣的。

... Where p.NAME = item1 AND p.NAME = item2 

我需要的是參數之間的或,但我不知道如何實現這一點。

任何幫助將不勝感激。

回答

0

明白了...

void Main() 
{ 
    var searchItems = new string[] { "test", "past", "most", "last", "fast", "feast", "yeast", "cast" }; 
    var query = from p in searchItems select new MyClass { Name = p }; 
    Predicate<MyClass> whereClause = _ => false; 
    foreach (var item in searchItems) 
    { 
     var searchItem = item; 
     Predicate<MyClass> oldClause = whereClause; 
     whereClause = p => p.Name == searchItem || oldClause(p); 
    } 

    query = query.Where(p => whereClause(p)); 
    query.Dump(); 
} 

public class MyClass 
{ 
    public MyClass() { } 
    public string Name { get; set; } 
} 

的代碼在LINQPad中奔去,而返回的每一個元素。

這裏是一個代碼翻譯成Vb.Net

Private Sub Main() 
    Dim searchItems = New String() {"test", "past", "most", "last", "fast", "feast", "yeast", "cast"} 
    Dim query = From p In searchItems Select New [MyClass]() With { .Name = p } 

    Dim whereClause As Predicate(Of [MyClass]) = Function(element) False 

    For Each item As String In searchItems 
     Dim searchItem = item 
     Dim oldClause As Predicate(Of [MyClass]) = whereClause 
     whereClause = Function(p) p.Name = searchItem OrElse oldClause(p) 
    Next 

    query = query.Where(Function(p) whereClause(p)) 
    query.Dump() 
End Sub 

Public Class [MyClass] 
    Public Sub New() 
    End Sub 
    Public Property Name() As String 
     Get 
      Return m_Name 
     End Get 
     Set 
      m_Name = Value 
     End Set 
    End Property 
    Private m_Name As String 
End Class 
+0

我已經看到了C#這樣的事情,但隨着部分「=>」不VB.Net工作。 – RadiatorTwo 2012-03-04 23:42:32

+0

這正是我正在尋找的。 非常感謝。 – RadiatorTwo 2012-03-05 00:10:22