Я пытаюсь использовать LINQ для запроса списка объектов, где это уместно.В настоящее время я застрял в синтаксисе вложенного запроса, с которым, я надеюсь, вы сможете мне помочь.
Классы:
public class FooType
{
public int Id { get; set; }
public IList<Foo> Foos { get; set; }
}
public class Foo
{
public int FooTypeId { get; set; }
public string CorrelationId { get; set; }
}
public class Bar
{
public string FooCorrelationId { get; set; }
}
Использование:
IList < FooType > fooTypes = new List < FooType >();
// ... add a lot of FooTypes, each enriched with some Foos
Bar bar = new Bar(){FooCorrelationId = "abcdef"};
Foo foo = fooTypes.Where( ft => ft.Foos.Where( f => f.CorrelationId == bar.FooCorrelationId ) ).First<Foo>();
Это происходит сбой, поскольку внешнее выражение WHERE снабжается чем-то, что не обеспечивает логическое возвращаемое значение.Как вы можете догадаться, я собираюсь сделать что-то подобное в LINQ:
foreach (FooType fooType in fooTypes)
{
Foo foo = fooType.Foos
.Where(f => f.CorrelationId == bar.FooCorrelationId)
.First();
}
У вас есть идеи, как получить тот Foo, который я ищу, тот, у которого CorrelationId "abcdef"?
И еще один вопрос к тестам: как насчет производительности?LINQ оптимизирует свои запросы?Или результат такой же, как итерация по объектам, как я делал в своем блоке «что-то вроде»?
Заранее большое спасибо!