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

时间:2019-04-21 21:51:51

标签: c# sql linq dapper

我在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

1 个答案:

答案 0 :(得分:0)

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

如果您要在结果中包括交货,即使交货没有交货行,也请使用LEFT JOIN。另外,请准备好使交货行字段返回NULL,这是在LEFT JOIN匹配尝试中不存在任何行的情况下对那些列的期望。