LINQ to SQL запрос критерия массива многих ко многим int ID - PullRequest
0 голосов
/ 19 июля 2010

Хорошо, это должно быть очень просто, но я делаю все возможное, чтобы прочитать все статьи по этому поводу и попробовал разные вещи, но не повезло.

У меня есть 3 таблицы в классической схеме «многие ко многим».

ПУНКТЫ ItemID Описание

ITEMFEATURES ItemID FeatureId

ОСОБЕННОСТИ FeatureId Описание

Теперь у меня есть интерфейс поиска, где вы можете выбрать любое количество функций (флажки). Я получаю их все как int [] с именем SearchFeatures.

Я просто хочу найти элементы, имеющие функции, которые содержатся в SearchFeatures.

например. что-то вроде:

return db.Items.Where(x => SearchFeatures.Contains(x.ItemFeatures.AllFeatures().FeatureID))

Внутри моего частичного класса Items я добавил собственный метод Features (), который просто возвращает все функции для этого элемента, но я все еще не могу интегрировать его каким-либо удобным способом в основной запрос LINQ.

Грр, это должно быть просто, такая 1-секундная задача в SQL. Большое спасибо.

1 Ответ

1 голос
/ 19 июля 2010

Следующий запрос вернет список элементов, основанный на списке searchFeatures:

from itemFeature in db.ItemFeatures
where searchFeatures.Contains(itemFeature.FeatureID)
select itemFeature.Item;

Хитрость в том, чтобы начать с таблицы ItemFeatures.

Можно искать элементы, которые имеют ВСЕ функции, как вы просили в комментариях.Хитрость заключается в том, чтобы динамически создать запрос.Смотрите здесь:

var itemFeatures = db.ItemFeatures;

foreach (var temp in searchFeatures)
{
    // You will need this extra variable. This is C# magic ;-).
    var searchFeature = temp;

    // Wrap the collection with a filter
    itemFeatures =
        from itemFeature in itemFeatures
        where itemFeature.FeatureID == searchFeature
        select itemFeature;
}

var items =
    from itemFeature in itemFeatures
    select itemFeature.Item;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...