次のようなメモリ内のデータテーブルがあります。
Tape Mask Count
BT1 DML69 3452
BT2 DML69 1569
BT2 DML87 2745
BT3 DML69 3215
BT3 DML87 1542
BT4 DML87 3214
BT5 DML69 2132
BT5 DML87 1241
最大数のマスクのみを含む、テープごとに 1 つの結果をテープごとに 1 つのデータ行を返す LINQ クエリが必要です。すなわち
Tape Mask Count
BT1 DML69 3452
BT2 DML87 2745
BT3 DML69 3215
BT4 DML87 3214
BT5 DML69 2132
私はこれをいくつかの異なる方法で実行しようとしましたが、すべて成功しませんでした。これが私の最新の試みです:
foreach (string tape in singOne.GetDistinctTapes(
converter.ConvertProcessesIDToSingOneID(selectedWafer)))
{
var tapeMaskQuery =
from row in tempTable.AsEnumerable()
where row.Field<string>("location1") == tape
select row;
if (tapeMaskQuery.Count() == 1)
{
tapeMaskCountTable.Rows.Add(tapeMaskQuery.ElementAt(0));
}
else
{
var maxMaskQuery =
(from fields in tapeMaskQuery.AsEnumerable()
select new
{
tape = fields.Field<string>("location1"),
mask = fields.Field<string>("mask"),
count = fields.Field<Int64>("count(*)")
}).Max(x => x.count);
tapeMaskCountTable.Rows.Add(maxMaskQuery);
}
}
ここで singOne.GetDistinctTapes() は、ウエハー上の異なるテープのリストを返すだけです。tempTable は、この記事の最初のテーブルの形式の DataTable です。各テープに複数の結果があるかどうかを確認します。ある場合は、「maxMaskQuery」を実行します。これは、テープとマスクの列ではなく、カウント列だけを含む DataRow のみを返すようです。この投稿の 2 番目の表のように、最後に 3 つの列すべてが存在する必要があります。
これを実装する方法についての助けをいただければ幸いです。
よろしく、
カイル