【问题标题】:In a WEBAPI REST how to use DTO and LINQ在 WEBAPI REST 中如何使用 DTO 和 LINQ
【发布时间】:2019-07-14 17:56:16
【问题描述】:

应该如何使用 DTO 和 LINQ 执行多个实体或对象的查询?

我正在开发一个 WEBAPI REST,其中包含三个实体:ProductCategorySupplier

每个案例都有其关键和每个案例之间的关系。 Supplier => Product => Category

如何使用 LINQ 创建 Product = 'Car'、Supplier = 'Ford' 和 Category = 'Truck' 的查询,该查询创建一个可以返回给调用者的List<> -- List 数据类型应该是具有与过滤器值相同的 3 列的 DTO(ProductSupplierCategory)?

请你告诉我应该怎么做,并举个例子。

谢谢

【问题讨论】:

  • “在 WEBAPI REST 中你应该使用 DTO 或 LINQ”什么? DTO(表示模型的类)与 LINQ(用于处理集合的 API)相比如何?
  • 好的,也许问题是错误的,我需要消耗同一个列表中的两个实体并在一个对象中显示它们
  • 您的用例的典型模式可能包括使用 LINQ 查询实体和使用 DTO 类返回向调用者查询的结果 -- 这是否有助于您理解为什么您的问题令人困惑,因为它目前的措辞
  • 谢谢@David,对不起,我的英语不好。您有一个可以同时使用的示例

标签: c# linq rest asp.net-web-api dto


【解决方案1】:

很难说在你的情况下如何使用 LINQ,因为类之间的关系不是很清楚,所以我将只使用 Product 对象给你一个答案。如果您给我更多信息,我可以更新我的答案。

var listOfSomethingDto = listOfProducts      //list of products should come from a repository or something similar
    .Where(product => product.Name == "Car") //WHERE:  get products with name equal to what you want
    .Select(product => new SomethingDto      //SELECT: for every product found with the .Where clause
        {                                    //        transform it in a new SomethingDto where the Product is the name of the product found
            Product = productName
        }
).ToList();

要过滤SupplierCategory,您需要将它们(以与Product 类似的方式)包含在尊重类之间关系的LINQ 查询中。

在本例中,SomethingDto(重命名以适合您的场景)可以定义为:

public class SomethingDto
{
    public string Product { get; set; }
}

或者,在您的情况下,具有所有属性:

public class SomethingDto
{
    public string Product { get; set; }
    public string Supplier { get; set; }
    public string Category { get; set; }
}

如您所见,DTO 是一种新的对象,用于将数据从一个点传输到另一个点,而无需实际使用您的基类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 2015-03-06
    • 2015-01-25
    • 2017-07-15
    • 2018-01-06
    • 2014-03-30
    相关资源
    最近更新 更多