gpt4 book ai didi

c# - LINQ 根据与子元素的匹配返回元素

转载 作者:行者123 更新时间:2023-11-30 20:32:25 25 4
gpt4 key购买 nike

我希望标题有意义。

我正在尝试生成一个 LINQ 查询,当子对象的子对象的所有元素与父元素上的属性不匹配时,该查询会返回这些元素。

希望我的描述没有让你失望。我认为一个具体的例子可能有助于解释我正在尝试做的事情。

我有三个类和一个枚举:

public class Studio
{
public int StudioId { get; set; }
public string StudioName { get; set; }
public Style Style { get; set; }

public virtual ICollection<Designer> Designers { get; set; }
}

public class Designer
{
public int DesignerId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int StudioId { get; set; }

public virtual Studio Studio { get; set; }
public virtual ICollection<Product> Products { get; set; }
}

public class Product
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public decimal Price { get; set; }
public int DesignerId { get; set; }
public Style ProductStyle { get; set; }

public virtual Designer Designer { get; set; }
}

public enum Style { Classic, Preppy, Modern, Punk, Goth }

每个工作室都有其整体Style ,以及每个Product有自己的风格。在某些情况下,Product可能会显示在 Studio具有不匹配的风格理念。

我可以生成一个 LINQ查询返回 IEnumerable<Product>包含所有ProductsStudio这是不匹配的吗?

我创建了一个有效的三重嵌套循环,但我希望得到一些帮助,将其转换为 LINQ 语句(使用点表示法):

public IEnumerable<Product> GetProductsWithOutsideStyles(Studio studio)
{
List<Product> products = new List<Product>();

foreach (Studio s in StudioContext.Studios.Where(s => s == studio))
{
foreach(Designer d in s.Designers)
{
foreach(Product p in d.Products)
{
if (p.ProductStyle != s.Style)
products.Add(p);
}
}
}

return products;
}

最佳答案

您可以通过您设置的导航属性访问属于 Studio 的产品。然后很容易检查 Product.ProductStyleStudio.Style 之间是否不匹配:

from s in context.Studios
where s.StudioId == studio.StudioId
from d in s.Designers
from p in d.Products
where p.ProductStyle != s.Style
select p

顺便说一下,您必须通过 ID 找到 Studio。 EF 不允许您在 LINQ 查询中使用 studio 变量。

关于c# - LINQ 根据与子元素的匹配返回元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41515293/

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