gpt4 book ai didi

c# - 如果指定的子值为 NULL,则显示父值

转载 作者:行者123 更新时间:2023-11-29 23:44:05 29 4
gpt4 key购买 nike

我有一个连接到 mysql 数据库并使用 Entity Framework (首先是数据库)的 MVC 5 站点。

在我的产品表中,一个父项可以有多个子项。在这种情况下,我们使用父项作为概述或容器,即父项是 PRODUCT-XYZ 概述,子项是它的变体(产品-XYZ-1-英寸、产品-XYZ-2-英寸,...)。由于会计源如何组织事物,结构必须保持这种方式。

使用 linq,可以轻松列出类别中的产品、通过指定 id 提取产品信息等。但我无法理解如何使用 linq 查询完成以下操作。

====================

场景 #1

给定子级的 ProductID,提取所有子级列,如果这些列为空,则用父级(从 ParentID 派生)覆盖一些指定的列。

例如,给定 ID 为 2 的子项,Description 和DetailedDescription 为 null,因此使用其父项的值(ID 为 1)。

====================

场景#2

与场景 #1 相同,但处于列表情况。列出 CategoryID 1 中的所有产品时,如果它是父项,则仅使用父值;如果它是子项并且“描述”、“详细描述”列中具有空值,则使用这些值。如果它是一个有自己值(value)观的 child ,那么就使用这些值(value)观。

表格:产品

------------------------------------------------------------------    
| ID | ParentID | ExternalID | Description | DetailedDescription |
------------------------------------------------------------------
| 1 | NULL | 3829 | Content | Content |
------------------------------------------------------------------
| 2 | 1 | 4837 | NULL | NULL |
------------------------------------------------------------------
| 3 | 1 | 9283 | Content | Content |
------------------------------------------------------------------
| 4 | 1 | 6382 | NULL | NULL |
------------------------------------------------------------------
| 5 | NULL | 3234 | Content | Content |
------------------------------------------------------------------
| 6 | 5 | 9283 | NULL | NULL |
------------------------------------------------------------------
| 7 | 5 | 2983 | Content | Content |
------------------------------------------------------------------

表:类别

-------------------------------
| ID | ExternalID | Name |
-------------------------------
| 1 | 2546 | Tools |
-------------------------------
| 2 | 3545 | Widgets |
-------------------------------

表:类别_产品

--------------------------
| CategoryID | ProductID |
--------------------------
| 1 | 1 |
--------------------------
| 1 | 2 |
--------------------------
| 1 | 7 |
--------------------------

====================

附加说明

我一直在提取特定产品的详细信息,如下所示:

Product product = (from p in db.Products.Include("Assets").Include("RelatedProducts")
where p.ID == id
select p).SingleOrDefault();

我使用以下方法提取一个类别及其产品:

Category category = (from cats in db.Categories.Include("SubCategories").Include("Products")
where cats.ID == id
select cats).SingleOrDefault();

如果我没有提供足够的信息,请告诉我,即使通用指导也会有所帮助。

最佳答案

public class ProductVM
{
public int Id { get; set; }
public string Desc { get; set; }
public string DetailDesc { get; set; }
public List<CategoryVM> cats { get; set; }
}
public class CategoryVM
{
public int Id { get; set; }
public int ParentId { get; set; }
public string Desc { get; set; }
public string DetailDesc { get; set; }
}


ProductVM product = new ProductVM();

using (YourEntities context = new YourEntities ())
{
product = (from x in context.Parents
where x.Id == 1
select new ProductVM
{
Id = x.Id,
Desc = x.Descr,
DetailDesc = x.DetailDesc
}).FirstOrDefault();

product.Categegories = (from x in context.Children
where x.ParentId == product.Id
select new CategoryVM
{
Id = x.Id,
ParentId = (int)x.ParentId,
Desc = x.Descr == null ? product.Desc : x.Descr,
DetailDesc = x.DetailDesc == null ? product.DetailDesc : x.DetailDesc
}).ToList();

}

如果您不熟悉?,它被称为三元运算符。它基本上是 if/else 的简写。在英语中,这行代码是...“如果x.Decrnull,则使Desc的值等于product” .Desc否则Desc等于x.Desc"

您的ProductVM将包含您产品的所有值并包含其类别列表,如果x字段为空,则该特定类别将从产品中获取值

编辑:看起来我的产品 - 类别关系倒退了,但这给了你要做什么的要点

关于c# - 如果指定的子值为 NULL,则显示父值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26037299/

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