Linq — присоединение через словарь, где KeyValuePair.Value является самой коллекцией

пытаясь понять, как должны выглядеть соединения для приведенного ниже примера. Будем очень признательны за любую помощь в определении возможности написания linq для следующего!

        List<string> col1;
        Dictionary<string, List<string>> join2;

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

        IEnumerable<string> query = from c1 in col1
                                    join kvp in join2 on c1 equals kvp.Value
                                    where c1 == "foo"
                                    orderby kvp.Key
                                    select kvp.Key;

Очевидно, что вышеприведенное терпит неудачу, поскольку kvp.Value - это список, а не строка, приравниваемая к c1 - какие-либо указатели?


person Matt S    schedule 19.07.2011    source источник
comment
Где все элементы столбца 1 появляются в значении? Где какой-либо элемент из столбца 1 появляется в значении? Порядок важен? Где появляется foo? На самом деле неясно, чего вы пытаетесь достичь в данный момент. Пожалуйста, дайте примерные данные.   -  person Jon Skeet    schedule 19.07.2011
comment
Привет, Джон, я хотел связать коллекцию в свойстве Value KeyValuePair, чтобы вернуть ключ. Условная часть «foo» обозначает значение, которое я хочу найти в наборе значений, чтобы вернуть ключ. Я ищу совпадения Any, поэтому множественные предложения from и условие where с использованием contains соответствуют моим требованиям. Спасибо, что посмотрели.   -  person Matt S    schedule 19.07.2011
comment
Использование вызова Any тоже сработало бы...   -  person Jon Skeet    schedule 19.07.2011


Ответы (1)


Я не уверен, зачем нужно соединение... если вы выбрали "foo", то следующий результат даст тот же результат:

        IEnumerable<string> query = from kvp in join2
                                where kvp.Value.Contains ("foo")
                                orderby kvp.Key
                                select kvp.Key;

Альтернативно с соединением

        IEnumerable<string> query = from c1 in col1 where c1 == "foo" from kvp in join2 
                                where kvp.Value.Contains (c1) 
                                orderby kvp.Key
                                select kvp.Key;
person Yahia    schedule 19.07.2011
comment
Спасибо - это то, что я хотел - это был простой пример, настоящая сложная причина имеет больше смысла в моем бизнес-кейсе. Не знал, что несколько from были возможны, теперь это имеет смысл. Спасибо!!! - person Matt S; 19.07.2011