Как сопоставить результаты обратно в массив - PullRequest
0 голосов
/ 05 ноября 2010

У меня есть массив объектов.У объекта есть два свойства: значение и индекс.

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

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

Какой самый быстрый лучший способ сделать это.Я могу добавить свойства к объекту.

Это почти как если бы я хотел, чтобы результаты запроса вернули это:

index = 1;
value = "searchkey"
queryvalue = "query value"

Ответы [ 2 ]

1 голос
/ 06 ноября 2010

По вашему вопросу я думаю, что могу предположить, что у вас определены следующие переменные:

  • Lookup[] (массив поиска)
  • IEnumerable<Record> (результатывозвращается по вашему запросу)

... и типы выглядят примерно так:

public class Lookup
{
    public int Index { get; set; }
    public int Value { get; set; }
}

public class Record
{
    public int Value { get; set; }
    /* plus other fields */
}

Тогда вы можете решить свою проблему несколькими способами.

Сначала используйте анонимный тип:

var matches
    = from r in records
      join l in lookups on r.Value equals l.Value
      group r by l.Index into grs
      select new
      {
          Index = grs.Key,
          Records = grs.ToArray(),
      };

Два других просто используют стандартный LINQ GroupBy & ToLookup:

IEnumerable<IGrouping<int, Record>> matches2
    = from r in records
      join l in lookups on r.Value equals l.Value
      group r by l.Index;

ILookup<int, Record[]> matches3
    = matches2.ToLookup(m => m.Key, m => m.ToArray());

Решают ли они вашу проблему?

1 голос
/ 05 ноября 2010

Просто выстрел в темноте относительно того, что вам нужно, но методы расширения LINQ могут обрабатывать индекс как второй параметр лямбда-функций.IE:

someCollection.Select ((x, i) => new {SomeProperty = x.Property, Index = i});

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