c# - 加入多个列表并以逗号分隔的字符串形式获取输出
问题描述
我有以下 2 个列表作为输入,我想实现下面提到的输出。
var T1 = new []
{
new { tid = 1, status = "P", qty = 2, itemid = 7, itemseq = 1, },
new { tid = 1, status = "P", qty = 3, itemid = 7, itemseq = 2, },
new { tid = 1, status = "R", qty = -3, itemid = 7, itemseq = 1, },
};
var T2 = new []
{
new { itemid = 7, itemseq = 1, itemname = "abc", itemdesc = "xyz", },
new { itemid = 7, itemseq = 2, itemname = "aaa", itemdesc = "ddd", },
};
期望的输出
tid desc1(Status P) desc2 (Status R)
1 abc - xyx (2), aaa - ddd (3) abc - xyz (-3)
到目前为止,我可以加入 2 个列表并使用 LINQ 获取以下数据
var Data = (from ti in T1
join iv in T2 on new { ti.itemid, ti.itemseq } equals new { iv.itemid,iv.itemseq}
select new
{
tid = ti.tid,
status = ti.status,
Desc = $"{iv.itemname} - {iv.itemdesc} ( {ti.qty} )"
}).ToList();
o/p:
tid status Desc
1 P abc - xyx (2)
1 P aaa - ddd (3)
1 R abc - xyz (-3)
有什么方法可以用最少的代码行实现所需的输出?
解决方案
试一试:
var Data =
(
from ti in T1
join iv in T2 on new { ti.itemid, ti.itemseq } equals new { iv.itemid,iv.itemseq}
group new { iv.itemname, iv.itemdesc, ti.status, ti.qty } by ti.tid into gs
let lookup = gs.ToLookup(x => x.status)
select new
{
tid = gs.Key,
desc1 = String.Join(", ", lookup["P"].Select(x => $"{x.itemname} - {x.itemdesc} ({x.qty})")),
desc2 = String.Join(", ", lookup["R"].Select(x => $"{x.itemname} - {x.itemdesc} ({x.qty})")),
}
).ToList();
我得到:
推荐阅读
- python - 在 Python 中使用库将字符串写入 csv
- ios - 从 Firebase Firestore 获取数据时,我的 SwiftUI 应用程序崩溃并出现错误。这可能是什么原因造成的?
- pandas - 使用 groupby 和 transform 时 Pandas 中的 SettingWithCopyWarning 错误
- java - XML文件到ArrayList java使用xstream错误
- html - 对齐 HTML 中非内联的复选框
- discourse - 除了 Discourse 上的 rel = "amphtml" 链接外,还有什么方法可以声明 AMP
- python - 如何遍历整个目录并从 Python 中的多类文件中仅选择一个类?
- c# - 如何在flowLayoutPanel中获取动态图片框的图像
- javascript - Express如何测量小于1ms的时间?
- react-native - 使用 React Navigation 将 props 传递给子组件