我在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中缺少某些内容,因为这很容易。
我的应用至少要显示以下内容。
何时应显示数据中的两条记录。
答案 0 :(得分:0)
问题出在您的SQL中。 INNER JOIN
需要匹配。在这种情况下,根据您的ON子句,匹配在Deliverys.id
和DeliveryLines.DeliveryId
之间。
如果您要在结果中包括交货,即使交货没有交货行,也请使用LEFT JOIN
。另外,请准备好使交货行字段返回NULL,这是在LEFT JOIN匹配尝试中不存在任何行的情况下对那些列的期望。