LINQ to SQL, в списках памяти и анонимных типах - PullRequest
0 голосов
/ 01 февраля 2012

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

Вот мой код

        public DataKeys(IEnumerable<Element> elements)
    {
        var defsource = new DefinitionSource();
        var items = from def in defsource.Definitions
                    where elements.Select(el=> el.Value).Contains(def.Name)                        
                    select new { def.Key };
        ...

    }

(Очевидно, что "elements" - это список элементов в памяти, а "DefinitionSource" - обертка вокруг таблицы.) Это прекрасно работает, но, как вы можете видеть, в списке элементов в памяти нет свойства.Я пробовал это

      var items = from def in defsource.Definitions
                  where elements.Select(el=> el.Value).Contains(def.Name)  
                  from el in elements
                  where el.Value.Equals(def.Name)
                  select new { el.NodeType, def.Key };

, но во время выполнения он генерирует локальную последовательность "{", которую нельзя использовать в реализациях операторов запросов LINQ to SQL, кроме оператора Contains. "}"

Так какой синтаксис мне нужен для этого?

Многие, спасибо IA

Саймон

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

Для запроса к двум источникам данных оба они должны быть в памяти, оба они должны быть в базе данных.Вы можете сделать следующее, чтобы достичь желаемых результатов

var query = (from def in defsource.Definitions
                  where elements.Select(el=> el.Value).Contains(def.Name)  
                  ).ToList();//bring filtered result in memory
var Items = from def in query //Definitions are already filtered no need to re-apply where
            from el in elements.Where(a=>a.Value == def.Name)
            select new {el.NodeType, def.Key};
1 голос
/ 01 февраля 2012

Это может помочь:

var def=defsource.Definitions
                    .Where(a=>elements.Select(el=>el.Value).Contains(a.Name))
                    .ToList();
var items = from d in def
          from el in elements
            .Where(a=>a.Value==d.Name)
                  select new { el.NodeType, d.Key };
...