2012-03-04 9 views
0

複数の検索パラメータをLINQ式に渡して、検索項目の1つを含むすべてのエントリを取得しようとしています。LINQから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 

私が必要とするのはパラメータ間のORですが、これをどのように達成できるかはわかりません。

ご協力いただければ幸いです。

答えて

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

+0

これはまさに私が探していたものです。 ありがとうございました。 – RadiatorTwo