Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在LINQ中为使用group by创建的子数据加边距?_C#_Linq_Linq To Sql_Group By_Linq To Entities - Fatal编程技术网

C# 如何在LINQ中为使用group by创建的子数据加边距?

C# 如何在LINQ中为使用group by创建的子数据加边距?,c#,linq,linq-to-sql,group-by,linq-to-entities,C#,Linq,Linq To Sql,Group By,Linq To Entities,我用以下数据创建了一个表 我想按DocumentID对数据进行分组,然后使用逗号分隔符将docpropidentityname和meta值标记在一起。输出如下所示: 我正在使用下面这样的foreach: var test = (from r in lstDocSearch group r by r.DocumentID into g select new

我用以下数据创建了一个表

我想按DocumentID对数据进行分组,然后使用逗号分隔符将docpropidentityname和meta值标记在一起。输出如下所示:

我正在使用下面这样的foreach:

var test = (from r in lstDocSearch
                    group r by r.DocumentID
                        into g

                        select new
                        {
                            DocumentID = g.Key,
                            MetaValues = g.ToList()

                        }).ToList();

        List<DocSearch> list = new List<DocSearch>();

        foreach (var item in test)
        {

            foreach (var item2 in item.MetaValues)
            {
                var check = list.Exists(x => x.DocumentID == item2.DocumentID);
                if (check)
                {
                    var find = list.FirstOrDefault(x => x.DocumentID == item2.DocumentID);

                    find.MetaValue = find.MetaValue + ", " + item2.MetaValue;
                    find.DocPropIdentifyName = find.DocPropIdentifyName + ", " + item2.DocPropIdentifyName;
                }
                else
                {
                    DocSearch objDocSearch = new DocSearch();

                    objDocSearch.DocumentID = item2.DocumentID;
                    objDocSearch.DocPropIdentifyID = item2.DocPropIdentifyID;
                    objDocSearch.DocPropIdentifyName = item2.DocPropIdentifyName;
                    objDocSearch.MetaValue = item2.MetaValue;

                    list.Add(objDocSearch);
                }
            }
        }
var test=(来自lstDocSearch中的r
按r.DocumentID分组r
进入g
选择新的
{
DocumentID=g.键,
MetaValues=g.ToList()
}).ToList();
列表=新列表();
foreach(测试中的var项目)
{
foreach(item.MetaValues中的var item2)
{
var check=list.Exists(x=>x.DocumentID==item2.DocumentID);
如果(检查)
{
var find=list.FirstOrDefault(x=>x.DocumentID==item2.DocumentID);
find.MetaValue=find.MetaValue+“,”+item2.MetaValue;
find.docpropidentityname=find.docpropidentityname+,“+item2.docpropidentityname;
}
其他的
{
DocSearch objDocSearch=新建DocSearch();
objDocSearch.DocumentID=item2.DocumentID;
objDocSearch.docpropidentifid=item2.docpropidentifid;
objDocSearch.docPropIdentityName=item2.docPropIdentityName;
objDocSearch.MetaValue=item2.MetaValue;
list.Add(objDocSearch);
}
}
}

但是我想用linq来做这件事,而不是在集合中循环。可能吗

你的意思是这样的吗

var test = (from r in lstDocSearch
            group r by r.DocumentID
            into g
            select new
            {
                DocumentID = g.Key,
                MetaValues = String.Join(",", g.Select(o => o.MetaValue)),
                DocPropIdentifyNames = String.Join(",", g.Select(o => o.DocPropIdentifyName)),
            }).ToList();

你的意思是这样的吗

var test = (from r in lstDocSearch
            group r by r.DocumentID
            into g
            select new
            {
                DocumentID = g.Key,
                MetaValues = String.Join(",", g.Select(o => o.MetaValue)),
                DocPropIdentifyNames = String.Join(",", g.Select(o => o.DocPropIdentifyName)),
            }).ToList();

他们一允许我,我就接受答案。他们一允许我,我就接受答案。