我有DTO包含DeliveryNote列表,客户列表。每份交货单都包含报价单,以便每个交货单都有多个报价单。但只有同一个客户。客户参考仅在报价中。
我需要选择查询,如报价单中的发货单日期,编号和参考,用逗号分隔(如果是多个)。
我写下面的LINQ
var source = from A in _deliveryNote.DeliveryNoteList
select new
{
A.ID,
A.Date,
A.Number,
Reference = String.Join(", ", from item in A.Quotations select item.Reference),
CustomerName = (A.Quotations != null ? _deliveryNote.CustomerList.Find(x => x.ID == A.Quotations.First().CustomerID).Name : string.Empty)
};
这很好用。但我需要一些提示,比如我的未处理案例,如果没有可用的报价,如何处理它,以及单个wuotation适用时如何避免使用逗号。
我还得到了一些其他类型的查询,如下所示。
var source = from A in _deliveryNote.DeliveryNoteList from B in A.Quotations
select new
{
A.ID,
A.Date,
A.Number,
//Reference = String.Join(", ", from item in A.Quotations select item.Reference),
//CustomerName = (A.Quotations != null ? _deliveryNote.CustomerList.Find(x => x.ID == A.Quotations.First().CustomerID).Name : string.Empty) //_deliveryNote.CustomerList.Find(x => x.ID == C.CustomerID).Name : String.Empty)
};
但是我不知道如何连接引用并检索客户名称
请指导我哪种方法更好,两种方法之间有什么区别
答案 0 :(得分:0)
你在“中提到的问题,但是我需要一些提示,例如我的未处理案例,如果没有可用的报价,如何处理,以及单个语言适用时如何避免使用逗号”,已经String.Join
方法处理得很好。您可以通过以下快速测试来证明:
var data = new List<string>();
var str = String.Join(", ", data);
//you'll get empty string here
Console.WriteLine(str);
data.Add("test 1");
str = String.Join(", ", data);
//you'll get "test 1" here, no unnecessary comma appended
Console.WriteLine(str);