逗号用Linq分隔字符串 [英] Comma separated string using Linq

查看:121
本文介绍了逗号用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 your RefContext 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆