Несколько параметров в LINQ to SQL - PullRequest
0 голосов
/ 05 марта 2012

Я пытаюсь передать несколько параметров поиска в выражение LINQ, чтобы извлечь все записи, содержащие один из элементов поиска.

Пример:

    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

Мне нужно ИЛИ между параметрами, но я не понимаю, как мне этого добиться.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 05 марта 2012

Понял ...

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...