Graeme_Grant
Как указал OriginalGriff, немного трудно попытаться понять, чего вы пытаетесь достичь. Так что я попробую угадать...
Для этого ответа я собираюсь использовать пример, чтобы проиллюстрировать то, что я считаю, что вы пытаетесь достичь, используя фиктивные данные.
1. Мы создаем индекс для элементов, прежде чем они сгруппированы
2. Группа индексированный список
3. выполните поиск по группе и выровняйте ее до одного результата, удерживая ключ группы и индекс элемента.
class Program
{
static void Main()
{
var actors = new List<Person>
{
new Person() {Name = "Gilligan", Sex = "male"},
new Person() {Name = "The Skipper", Sex = "male"},
new Person() {Name = "Thurston Howell, III ", Sex = "male"},
new Person() {Name = "Mrs. Howell", Sex = "female"},
new Person() {Name = "Ginger Grant", Sex = "female"},
new Person() {Name = "Professor", Sex = "male"},
new Person() {Name = "Mary Ann Summers ", Sex = "female"},
};
// search value
var name1 = "Ginger Grant";
// example 1 - flat list with index
var indexedActors = actors.Select((x, i) => new {Index = i, Actor = x});
// get the search result
var result1 = indexedActors
.FirstOrDefault(x => x.Actor.Name.Equals(name1));
// get index of search value
var index1 = result1?.Index ?? 0;
// inxdex1 = 4
// example 2 - grouped by sex list
var groupedActors = indexedActors.GroupBy(x => x.Actor.Sex);
var result2 = groupedActors
.Select(x => new
{
key = x.Key,
value = x.FirstOrDefault(y => y.Actor.Name.Equals(name1))
})
// only for valid group
.Where(x => x.value != null);
// get index & key of search value
var index2 = result2?.Select(x => x.value.Index).FirstOrDefault() ?? 0;
var key = result2?.Select(x => x.key).FirstOrDefault() ?? "";
// inxdex2 = 4, key = "female"
}
}
class Person
{
public string Name { get; set; }
public string Sex { get; set; }
}
Этот ответ предназначен для возврата только первого результата. Вам нужно будет внести изменения, если вам потребуется список результатов.