LINQ-获取某个属性在该属性的另一个结果集中的结果';s类型

本文关键字:结果 属性 类型 集中 获取 LINQ- 另一个 | 更新日期: 2023-09-27 18:26:08

我想在ShedStyles.Where(...) 的结果中找到BuildingPrice.ShedStyle属性所在的每个BuildingPrice

var prices = db.BuildingPrices.Where(
    p => p.ShedStyle.IsAmong( //There must be some obvious method for this
        db.ShedStyles.Where(s => s.Name.Contains("text")
    );
public class BuildingPrice
{
    public ShedStyle ShedStyle { get; set; }
}
public class ShedStyle
{
    public string Name { get; set; }
}
public class Context : DbContext
{
    public DbSet<BuildingPrice> BuildingPrices { get; set; }
    public DbSet<ShedStyle> ShedStyles { get; set; }
}

LINQ-获取某个属性在该属性的另一个结果集中的结果';s类型

可以使用Any()Contains():

var prices = db.BuildingPrices.Where(
 p => db.ShedStyle.Where(s => s.Name.Contains("text")).Any(x=> x.Name == p.ShedStyle.Name));

但考虑到你的疑问,你为什么不能直接测试条件?

var prices = db.BuildingPrices.Where(p=> p.ShedStyle.Name.Contains("text"));

后一种方法似乎要简单得多。

现在有点晚了,我的大脑还没有满负荷,因为我相信使用Join可以做到这一点,但如果没有Join,以下是我的想法。你只是有点倒退了。

        var prices = db.BuildingPrices.Where
            (
                p => db.ShedStyles
                    .Where( s => s.Name.Contains("text"))
                    .Contains(p.ShedStyle)
            );
var prices = db.BuildingPrices.Where(
p => db.ShedStyles.Where(s => s.Name.Contains("text")).Contains(p.ShedStyle));