LINQ-to-SQL фильтр выбора - PullRequest
       14

LINQ-to-SQL фильтр выбора

0 голосов
/ 10 февраля 2009

Есть ли способ обеспечить добавление определенного условного предложения в дерево выражений при каждом выборе из определенной таблицы?

Например, таблица с полем с датой удаления записи никогда не должна возвращаться или включаться в какие-либо утверждения.

Вместо того, чтобы каждый раз включать выражение where, есть ли способ, без создания представления, добавить условное выражение для каждого выбора?

--- Изменить для ясности ниже ---

Я ищу функцию, которую я могу использовать частично, как функции Вставка / Обновление / Удаление, но для выбора. Я хочу применить общий фильтр ко всем запросам к таблице.

Кроме того, если я получу коллекцию элементов от родителя, я хочу, чтобы этот набор также был отфильтрован.

Что-то вроде:

Private Function BaseItems() As IQueryable(Of Item)
    Return (From mi In dataContext.Items Where mi.DeletedAt Is Nothing Select mi)
End Function
Public Function GetItems() as list(of Item)
    Return (From mi in BaseItems() select mi).ToList()
End Function

работает для функций, которые я пишу и вызываю. ПУНКТЫ, может быть дитя МАСТЕРА, например.

'assume TheMaster is a LinqToSQL data class which has a one to many child of Items
TheMaster.Items.Count '<-- will bring back all Items.

Как мне всегда фильтровать то, что заполняется по классам данных?

Ответы [ 3 ]

1 голос
/ 10 февраля 2009

Вы должны сделать это, поместив элементы в список, а затем использовать лямбда-выражения для фильтрации списка?

MyListObject.Where(x => x == x.Date);
0 голосов
/ 10 февраля 2009

AssociateWith в DataLoadOptions DataContext, кажется, делает то, что мне нужно.

0 голосов
/ 10 февраля 2009

Я не уверен, что понимаю контекст вашего вопроса. Однако вы можете добавить дополнительные условия в запрос linq. Если вы вернете IQueryable, вы вернете только исполняемый запрос и можете связать с ним другие запросы LINQ. Afaik, он не будет выполняться, пока вы не начнете переходить в IEnumerable или List для итерации.

Пример LINQ-to-SQL:

MyDataContext context = new MyDataContext();

public IQueryable<MyTable> GetTable() {
    return from record in context.Records
           where record.Date > DateTime.Now
           select record;
}

public IEnumerable<MyTable> GetTableWithinWeek() {
    return from record in GetTable()
           where record.Date < DateTime.Now.AddDays(7);
           select record;
}

Надеюсь, мой ответ имеет смысл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...