仅返回数据集中的一条记录

问题描述 投票:0回答:1

我在我的web API和dapper中使用ado .net并且我有一个功能,它检查订单和订单行,如果他们只有一个订单,但如果没有订单行的订单,它将不会显示订单详细信息。

public IHttpActionResult Get()
{
        string retJson;
        string constring = ConfigurationManager.AppSettings["DeliveryGocs"].ToString();
        string sql = "SELECT * FROM Deliverys AS A INNER JOIN DeliveryLines AS B ON A.id = B.DeliveryId;";
        using (var connection = new SqlConnection(constring))
        {
            var orderDictionary = new Dictionary<int, DeliverysItems>();
            var list = connection.Query<DeliverysItems, DeliverItemLines, DeliverysItems>(
                sql,
                (order, orderDetail) =>
                {
                    DeliverysItems orderEntry;
                    if (!orderDictionary.TryGetValue(order.id, out derEntry))
                    {
                        orderEntry = order;
                        orderEntry.DeliveryLines = new List<DeliverItemLines>();
                        orderDictionary.Add(orderEntry.id, orderEntry);
                    }

                    orderEntry.DeliveryLines.ad(orderDetail);
                    return orderEntry;
                })
            .Distinct()
            .ToList();
            retJson = JsonConvert.SerializeObject(list);
            var response = this.Request.CreateResponse(HttpStatusCode.OK);
            response.Content = new StringContent(retJson, Encoding.UTF8, "application/json");

            return ResponseMessage(response);
        }
    }

交货项目

public class DeliverysItems
{
   [Key]
    public int id { get; set; }
    public string SopOrderNumber { get; set; }
    public string CustomerName { get; set; }
    public int DeliveryDriverId { get; set; }
    public decimal OrderTotal { get; set; }
    public string TelephoneNumber    { get; set; }
    public string EmailAddress { get; set; }        
    public int hasBeenDelivered { get; set; }
    public List<DeliverItemLines> DeliveryLines { get; set; }
}

交货线类。

public   class DeliverysItems
{
   [Key]
    public int id { get; set; }
    public string SopOrderNumber { get; set; }
    public string CustomerName { get; set; }
    public int DeliveryDriverId { get; set; }
    public decimal OrderTotal { get; set; }
    public string TelephoneNumber    { get; set; }
    public string EmailAddress { get; set; }

    public int hasBeenDelivered { get; set; }

    public List<DeliverItemLines> DeliveryLines { get; set; }
 }
}

我需要上面的例程来工作,如果订单没有订单行,它仍然会显示最高订单标题的详细信息。我认为我在sql中遗漏了一些东西,因为这应该很简单。

在最小的时候,我的应用程序显示以下内容。

何时应显示数据中的两条记录。

enter image description here

c# sql linq dapper
1个回答
0
投票

问题出在您的SQL中。 INNER JOIN需要一场比赛。在这种情况下,根据您的ON子句,匹配在Deliverys.idDeliveryLines.DeliveryId之间。

如果您希望在结果中包含交货,请使用LEFT JOIN,即使交货没有交货行。另外,请准备好您的交付行字段返回NULL,这是在LEFT JOIN匹配尝试中不存在行时对这些列的期望。

© www.soinside.com 2019 - 2024. All rights reserved.