簡體   English   中英

C#LINQ子查詢(在實體上)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM