逗号用Linq分隔字符串 [英] Comma separated string using Linq
本文介绍了逗号用Linq分隔字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个表格参考值如下
I have one table Reference with value as follows
ReferenceId Name Desc
1 Ref1 test1
2 Ref2 test2
3 Ref3 test3
4 Ref4 test4
5 Ref5 test5
6 Ref6 test6
其他表如下RefContext
(在此表中,childlist列包含来自上面参考表的ReferenceId的ID
Other table as follows RefContext
(In this table childlist column contains Id of ReferenceId from above Reference Table
ContextId ReferencId ChildList
1 1 2,3
2 4 1,5,6
我想加入上面的表格我希望输出如下
I want to join above to tables and I want Output as follows
ReferenceName ReferenceList
Ref1 Ref2, Ref3
Ref4 Ref1, Ref5, Ref6
我想用LINQ做这件事。请帮帮我。
I want to do this using LINQ. please help me in this.
推荐答案
var dtReference = new DataTable("Reference");
var dtRefContext = new DataTable("RefContext");
var dtOutput = new DataTable("Output");
dtReference.Columns.AddRange
(
new DataColumn[]
{
new DataColumn("ReferenceId", typeof (int)),
new DataColumn("Name", typeof (string)),
new DataColumn("Desc", typeof (string))
}
);
dtRefContext.Columns.AddRange
(
new DataColumn[]
{
new DataColumn("ContextId", typeof (int)),
new DataColumn("ReferenceId", typeof (int)),
new DataColumn("ChildList", typeof (string))
}
);
dtOutput.Columns.AddRange
(
new DataColumn[]
{
new DataColumn("ReferenceName", typeof (string)),
new DataColumn("ReferenceList", typeof (string))
}
);
for (int i = 1; i <= 6; i++)
{
var rowRef = dtReference.NewRow();
rowRef["ReferenceId"] = i;
rowRef["Name"] = "Ref" + i;
rowRef["Desc"] = "test" + i;
dtReference.Rows.Add(rowRef);
}
var rowCon = dtRefContext.NewRow();
rowCon["ContextId"] = 1;
rowCon["ReferenceId"] = 1;
rowCon["ChildList"] = "2,3";
dtRefContext.Rows.Add(rowCon);
rowCon = dtRefContext.NewRow();
rowCon["ContextId"] = 2;
rowCon["ReferenceId"] = 4;
rowCon["ChildList"] = "1,5,6";
dtRefContext.Rows.Add(rowCon);
var _aa =
from a in dtReference.AsEnumerable()
from b in dtRefContext.AsEnumerable()
where b.Field<int>("ReferenceId") == a.Field<int>("ReferenceId")
select new
{
tempName = a.Field<string>("Name"),
tempNameList = b.Field<string>("ChildList").Split(',').Select(int.Parse)
};
var _bb =
from a in dtReference.AsEnumerable()
from b in _aa
where b.tempNameList.Contains(a.Field<int>("ReferenceId"))
select new
{
tempName = b.tempName,
tempNameList = a.Field<string>("Name"),
};
var result =
from r in _bb
group r by r.tempName into g
select new
{
ReferenceName = g.Key,
ReferenceList = string.Join(",", g.OrderBy(s => s.tempName)
.Select(s => s.tempNameList))
};
foreach (var item in result)
{
var rowOut = dtOutput.NewRow();
rowOut["ReferenceName"] = item.ReferenceName;
rowOut["ReferenceList"] = item.ReferenceList;
dtOutput.Rows.Add(rowOut);
}
您有机会重新设计RefContext
表!
但是,如果你不能(或者你不想)这样做,那么请看看这个页面:LINQ:查询逗号分隔值(CSV)文件 [ ^ ]。
You have a wonderful opportunity to re-design yourRefContext
table!
However, you if cannot (or you don't want to) do it, then have a look at this page: LINQ: Query Comma Separated Value (CSV) files[^].
这篇关于逗号用Linq分隔字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文