[英]C# LINQ subquery (On entities)
我試圖使用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是否優化了它的查詢? 或者結果與對象的迭代相同,就像我在“類似”塊中所做的那樣?
非常感謝提前!
只需用SelectMany替換外部,然后獲取第一個
Foo foo = fooTypes
.SelectMany(ft => ft.Foos.Where(f => f.CorrelationId == bar.FooCorrelationId))
.First();
如果你要在所有FooType中獲得第一個Foo,那么CorrelationId == FooCorrelationId。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.