gpt4 book ai didi

C# LINQ 子查询(关于实体)

转载 作者:太空宇宙 更新时间:2023-11-03 22:19:11 24 4
gpt4 key购买 nike

我正在尝试使用 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 表达式被提供了一些不提供 bool 返回值的东西。正如您可能猜到的那样,我打算在 LINQ 中执行类似以下操作:

 foreach (FooType fooType in fooTypes)
{
Foo foo = fooType.Foos
.Where(f => f.CorrelationId == bar.FooCorrelationId)
.First();
}

您是否知道如何获得我正在寻找的 Foo,CorrelationId 为“abcdef”的那个?

基准测试人员还有一个问题:性能如何? LINQ 是否优化它的查询?或者结果是否与我在“类似” block 中所做的对对象的迭代相同?

提前致谢!

最佳答案

只需将外部 where 替换为 SelectMany 并获取第一个

Foo foo = fooTypes
.SelectMany(ft => ft.Foos.Where(f => f.CorrelationId == bar.FooCorrelationId))
.First();

如果您想要获得所有 FooType 中的第一个 Foo,CorrelationId == FooCorrelationId 是什么。

关于C# LINQ 子查询(关于实体),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3853554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com