1

私は次の方法で入力フォーマットを持っています

S.noネーム賃金

1       Tom     $200

1       Tom     $300

1       Tom     $400

2        Rob     $500

2        Rob     $600

結果セットは次のようにする必要があります

  Name   OriginalWage  DuplicateWage

   Tom       $200              $300

   Tom      $200               $400

   Rob       $500               $600

最初のレコードを残し、重複したレコードを count に入れる必要があります。ここで、元の賃金は最初の別個のレコードの賃金です。

linq を使用して結果セットを達成するにはどうすればよいですか。

This is the one i tried so far


//Get duplicate values
Dim Duplicates = wageRecordList.GroupBy(Function(w) w.serialnumber).Where(Function(d) d.Count > 1)

//load duplicates to a list 
lstDuplicateRecords=Duplicates 

//Read list--This one is a hard coded sort of thing and works only for one set of duplicate values

lstResult = (From duplicateRecords In lstDuplicateRecords.Skip(1) Select serialnumber= duplicateRecords.serialnumber, Name= duplicateRecords.Name, OriginalWages= CType(lstDuplicateRecords(0).Wages, String), _
DuplicateWages = CType(duplicateRecords.wages, String))
4

2 に答える 2

1

私はあなたが望む結果セットを得ることができました (素晴らしい挑戦であることが証明されました):

ただし、従業員について最初に見つかったレコードが元の賃金であると想定しています...

var result = from employeeWages in GetEmployees().GroupBy(e => e.Name)
             from duplicateWage in employeeWages.Skip(1).Select(e => e.Wage)
             select new
             {
                Name = employeeWages.Key,
                OriginalWage = employeeWages.First().Wage,
                DuplicateWage = duplicateWage
             };

テスト用の完全な LinqPad スクリプトはこちら: http://share.linqpad.net/wgxcns.linq

例の結果

ここに画像の説明を入力

于 2013-06-27T15:20:16.510 に答える
1

このようなものを作ることができます

 var groupedUsers = from user in users
                           group user by user.User into userGroup
                           select new
                           {
                               User = userGroup.Key,
                               userHobies =
                                   userGroup.Aggregate((a, b) => 
                                       new { User = a.User, Hobby = (a.Hobby + ", " + b.Hobby) }).Hobby
                           }
                            ;
        foreach (var x in groupedUsers)
        {
            Debug.WriteLine(String.Format("{0} {1}", x.User, x.userHobies));
        }

コードは私のものではなく、から取得されました: LINQ を使用して複数の行を単一の行に連結します (CSV プロパティ)

このリンクも役立つかもしれません

編集済み

申し訳ありませんが、このようなものがうまくいく可能性があると誤解しています

var query = from sal in _yourcontext
join salmin in ( from sal1 in _yourcontext
                 group sal1 by sal1.name into group
                 select new{ 
                        Name = group.Key
                        MinSal = group.Min(sal1=>sal1.Salary))
                        }
on sal.Name equals salmin.Name into result
where sal.Salary != salmin.MinSal
select new{ salmin.Name,salmin.MinSal,sal.Salary }
于 2013-06-26T06:04:22.887 に答える