1

複数の行を単一の行に連結することは可能ですか?

例えば:

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}}
};

出力する必要があります:

{
    new sample { id = 1, name = "sample 1", list = "1,5,6" },
    new sample { id = 2, name = "sample 2", list = "2,9" },
    new sample { id = 3, name = "sample 3", list = "8,3,7" },
    new sample { id = 4, name = "sample 4", list = "3,4,8" },
    new sample { id = 5, name = "sample 5", list = "1,5,7" },
    new sample { id = 6, name = "sample 6", list = "6,9,7" }
};

つまり、リストから新しい行が文字列になりました。

4

2 に答える 2

7

もちろん:

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

注: 結果は匿名型になります。sampleここでクラスlistを再利用することはできませList<int>string

.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))
                });
于 2012-09-05T07:52:02.463 に答える
0

1 つの列に複数のレコードを収集し (各従業員には多くの専門分野がある場合があります)、それを結合で使用する必要があったため、次のように解決しました。

これらのエンティティを持つ:

1) EMPLOYEEs エンティティ

|EMPLOYEE_ID|

|001        |

|002        |    

2) EMPLOYEE_SPECIALTIES エンティティ

|EmployeeId|SPECIALTY_CODE

|001       |AAA

|001       |BBB

|002       |DDD

|002       |AAA

従業員ごとに専門分野を 1 つの列にまとめる必要がありました。

|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;

これが誰かを助けることを願っています!

于 2016-10-03T13:50:09.660 に答える