如何解决从多个SQL查询填充对象
我只是在寻找一些指针以使我走上正确的道路。我有2个SQL查询,一个返回客户列表,一个返回客户已完成的订单列表。在C#中工作,我如何填充一个可以序列化为json的类。
我尝试了多种不同的方式,现在这是我上课时最接近的方式...
public class jsonOrder
{
public string order_no { get; set; }
public string customer { get; set; }
public List<orderitem> items { get; set; }
public decimal grandtotal { get; set; }
public jsonOrder()
{
this.items = new List<orderitem>();
}
}
public class orderitem
{
public string itemcode{ get; set; }
public int quantity { get; set; }
public decimal amount { get; set; }
}
使用它,我可以让我的json看起来像这样...
[
{
"order_no": "12345","customer": "12","items": [],"grand_total": 6.0000,}
{
...another order...
}
]
如何获取要在订单中列出时间的项目?
例如
{
"order_no": "12345","items": [
{"itemcode":"a","quantity":1,"amount":12.34}
{"itemcode":"b","quantity":2,"amount":6.12}
],"grand_total": 24.5800
}
目前我的代码是
List<readOrder> orderhistory = new List<Models.readOrder>(ordHead.Rows.Count);
if (ordHead.Rows.Count > 0)
{
foreach (DataRow orders in ordHead.Rows)
{
orderhistory.Add(new readOrder(orders));
}
}
但这只是带回标题详细信息。
我目前是从以下代码中获取SQL的,但是我很灵活...
_con = new SqlConnection(ConfigurationManager.ConnectionStrings["Connection"].ConnectionString);
// Get all orders
DataTable ordHead = new DataTable();
var queryHead = "Select * from ORDERHEADER where customer = " + customer;
_Header_adapt = new SqlDataAdapter
{
SelectCommand = new SqlCommand(queryHead,_con)
};
_Header_adapt.Fill(ordHead);
//Get items within orders
DataTable ordDetail = new DataTable();
var queryDetail = "Select * from ORDERHISTORY where customer = " + customer;
_adapt = new SqlDataAdapter
{
SelectCommand = new SqlCommand(queryDetail,_con)
};
_adapt.Fill(ordDetail);
```
解决方法
您可以尝试通过以下方式“伪造”它:
internal class Program
{
private static void Main(string[] args)
{
Console.WriteLine("Hello World!");
var jo = new jsonOrder()
{
customer = "cust",order_no = "123"
};
jo.itemsOrdered.Add("cdf",new jsonOrder.orderitem
{
amount = 1,itemcode = "cdf",quantity = 10
});
jo.itemsOrdered.Add("abc",itemcode = "abc",quantity = 10
});
Console.WriteLine(JsonConvert.SerializeObject(jo));
Console.ReadKey();
}
}
internal class jsonOrder
{
public jsonOrder()
{
this.itemsOrdered = new SortedList<string,orderitem>();
}
public string customer { get; set; }
public decimal grandtotal { get; set; }
[JsonIgnore]
public SortedList<string,orderitem> itemsOrdered
{
get;set;
}
public List<orderitem> items
{
get { return itemsOrdered.Values.ToList(); }
}
public string order_no { get; set; }
public class orderitem
{
public decimal amount { get; set; }
public string itemcode { get; set; }
public int quantity { get; set; }
}
}
,
请尝试以下操作,并选中this将为您提供帮助。
df['b'] == df2['b']
,
我设法解决了它……我的更正代码如下。感谢那些向我指出了方向的人……
public HttpResponseMessage Get(string customer_urn)
{
_con = new SqlConnection(ConfigurationManager.ConnectionStrings["Connection"].ConnectionString);
string queryString = "Select * from ORDERHEADER where customer = " + customer;
DataSet ordetails = new DataSet();
DataSet ordetailssub = new DataSet();
var q_Head = "Select * from ORDERHEADER where customer = " + customer;
_Header_adapt = new SqlDataAdapter
{
SelectCommand = new SqlCommand(q_Head,_con)
};
_Header_adapt.Fill(ordetails,"ORDERHEADER");
var q_Detail = "Select * from ORDERDETAIL where customer = " + customer;
SqlDataAdapter _Det_adapt = new SqlDataAdapter
{
SelectCommand = new SqlCommand(q_Detail,_con)
};
_Det_adapt.Fill(ordetails,"ORDERDETAIL");
DataRelation ordRel = ordetails.Relations.Add("x",ordetails.Tables["ORDERHEADER"].Columns["Order"],ordetails.Tables["ORDERDETAIL"].Columns["Order"]);
SqlDataAdapter custAdapter =
new SqlDataAdapter("Select * from ORDERHEADER where customer = " + customer,_con);
SqlDataAdapter ordAdapter = new SqlDataAdapter("Select * from ORDERDETAIL where customer = " + customer,_con);
DataSet customerOrders = new DataSet();
var jsonorderlist = new List<jsonOrder>();
var oh3 = new jsonOrder() { };
foreach (DataRow pRow in ordetails.Tables["ORDERHEADER"].Rows)
{
var ord = new jsonOrder()
{
order_id = pRow["order"].ToString(),customer_urn = pRow["Customer"].ToString(),total = Convert.ToDecimal(pRow["total"]),};
int key1 = 0;
foreach (DataRow cRow in pRow.GetChildRows(ordRel))
{
key1 = key1 + 1;
ord.itemsordered.Add(key1.ToString(),new jsonOrder.orderitem
{
prod = cRow["prod"].ToString(),qty = Convert.ToInt32(cRow["qty"]),total_amount = Convert.ToDecimal(cRow["total_amount"])
});
}
jsonorderlist.Add(ord);
}
return Request.CreateResponse(HttpStatusCode.OK,jsonorderlist);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。