Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.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中将多行连接为一行_C#_.net_Linq - Fatal编程技术网

C# 在LINQ中将多行连接为一行

C# 在LINQ中将多行连接为一行,c#,.net,linq,C#,.net,Linq,是否可以将多行连接到一行 例如: IEnumerable<sample> sam = new List<sample>() { new sample{ id = 1, name = "sample 1", list = new List<int>{1,5,6}}, new sample{ id = 2, name = "sample 2", list = new List<int>{2,9}}, new sample{ id

是否可以将多行连接到一行

例如:

IEnumerable<sample> sam = new List<sample>()
{
    new sample{ id = 1, name = "sample 1", list = new List<int>{1,5,6}},
    new sample{ id = 2, name = "sample 2", list = new List<int>{2,9}},
    new sample{ id = 3, name = "sample 3", list = new List<int>{8,3,7}},
    new sample{ id = 4, name = "sample 4", list = new List<int>{3,4,8}},
    new sample{ id = 5, name = "sample 5", list = new List<int>{1,5,7}},
    new sample{ id = 6, name = "sample 6", list = new List<int>{6,9,7}}
};
这意味着从列表中,新行现在是一个字符串。

确定:

sam.Select(x => new { x.id, x.name, list = String.Join(",", x.list) });
注意:结果将是匿名类型。我们不能在这里重用
示例
类,因为在该类中
列表
属于
列表
类型,而不是
字符串

如果您一直使用.NET 3.5或更低版本,请改用以下代码:

sam.Select(x => new
                {
                    x.id, x.name,
                    list = String.Join(",", x.list.Select(y => y.ToString())
                                                  .ToArray())
                });
如果要在获取字符串之前对列表进行排序,则需要使用以下代码:

sam.Select(x => new
                {
                    x.id, x.name,
                    list = String.Join(",", x.list.OrderBy(y => y))
                });
当然可以:

注意:结果将是匿名类型。我们不能在这里重用
示例
类,因为在该类中
列表
属于
列表
类型,而不是
字符串

如果您一直使用.NET 3.5或更低版本,请改用以下代码:

sam.Select(x => new
                {
                    x.id, x.name,
                    list = String.Join(",", x.list.Select(y => y.ToString())
                                                  .ToArray())
                });
如果要在获取字符串之前对列表进行排序,则需要使用以下代码:

sam.Select(x => new
                {
                    x.id, x.name,
                    list = String.Join(",", x.list.OrderBy(y => y))
                });

由于我需要在一列中收集多个记录(每个员工可能有许多专长),然后将其用于联接,因此我解决了以下问题:

拥有这些实体:

1) 雇员实体

|EMPLOYEE_ID|

|001        |

|002        |    
2) 员工专业实体

|EmployeeId|SPECIALTY_CODE

|001       |AAA

|001       |BBB

|002       |DDD

|002       |AAA
我需要在一个columun中按员工收集专业:

|EmployeeId|SPECIALTY_CODE

|001       |AAA, BBB

|002       |DDD, AAA
解决方案:

var query = from a in context.EMPLOYEE_SPECIALTIES.ToList()
            group a by a.EMPLOYEE_ID into g
            select new 
            {
                EmployeeId = g.Key,
                SpecialtyCode = string.Join(",", g.Select(x =>  
                x.SPECIALTY_CODE))
            };

var query2 = (from a in query
              join b in context.EMPLOYEEs on a.EmployeeId equals b.EMPLOYEE_ID
              select new EmployeeSpecialtyArea
              {
                  EmployeeId = b.EMPLOYEE_ID,
                  LastName = b.LAST_NAME,
                  SpecialtyCode = a.SpecialtyCode
              });

ViewBag.EmployeeSpecialtyArea = query2;

我希望这可以帮助别人

由于我需要在一列中收集多个记录(每个员工可能有许多专长),然后将其用于联接,因此我解决了以下问题:

拥有这些实体:

1) 雇员实体

|EMPLOYEE_ID|

|001        |

|002        |    
2) 员工专业实体

|EmployeeId|SPECIALTY_CODE

|001       |AAA

|001       |BBB

|002       |DDD

|002       |AAA
我需要在一个columun中按员工收集专业:

|EmployeeId|SPECIALTY_CODE

|001       |AAA, BBB

|002       |DDD, AAA
解决方案:

var query = from a in context.EMPLOYEE_SPECIALTIES.ToList()
            group a by a.EMPLOYEE_ID into g
            select new 
            {
                EmployeeId = g.Key,
                SpecialtyCode = string.Join(",", g.Select(x =>  
                x.SPECIALTY_CODE))
            };

var query2 = (from a in query
              join b in context.EMPLOYEEs on a.EmployeeId equals b.EMPLOYEE_ID
              select new EmployeeSpecialtyArea
              {
                  EmployeeId = b.EMPLOYEE_ID,
                  LastName = b.LAST_NAME,
                  SpecialtyCode = a.SpecialtyCode
              });

ViewBag.EmployeeSpecialtyArea = query2;

我希望这可以帮助别人

您将无法返回
示例
s,因为
列表
可以定义为
列表
字符串
,而不是两者,否则这是非常简单的LINQ。您将无法返回
示例
s,因为
列表
可以定义为
列表
字符串
,而不是两者,但除此之外,这是非常简单的LINQ.String.Join使用的是
String[]
,而不是
List
@Rawling:String.Join有几个重载。我的代码是这样的:@abatishchev/Daniel那太好了。我迫不及待地想得到4/4.5版本。@Rawling:甚至根据丹尼尔链接的MDSN文章开始3.5版本。@abatishchev它为我写了“4.5,4”。在批评之前,我确实在我的3.5项目中尝试了这段代码:)String.Join使用了
String[]
,而不是
列表
@Rawling:String.Join有几个重载。我的代码是这样的:@abatishchev/Daniel那太好了。我迫不及待地想得到4/4.5版本。@Rawling:甚至根据丹尼尔链接的MDSN文章开始3.5版本。@abatishchev它为我写了“4.5,4”。在批评之前,我确实在我的3.5项目中尝试过这段代码:)