このサンプルデータを考えてみましょう。
field1 field2
1 100
2 100
3 101
4 102
5 102
6 103
の値が1回だけ発生するレコードのみを選択したいfield2
。上記からの望ましい戻りデータの例は次のとおりです。
field1 field2
3 101
6 103
これはLINQtoSQLでどのように行われますか?
---編集-------
みなさん、こんにちは。ご回答ありがとうございます。質問の根源を正しく理解するために、意図的に簡略化されたデータを提供しました。これらの回答はすべて、私の例のデータに基づいて望ましい結果を返すと思います。そのようにすべての回答にマークを付けます。
ただし、実際のデータシナリオでは、あなたの回答から学んだことを使用して、次のようなものがあります。
var RefinedSource = from a in dSource
group a by a.AssetID into g
where g.Count() == 1
select new
{
AssetID = g.Key,
AssetType = g.Min(a => a.AssetType),
IPInfo = AppUtility.GetIPInfo(g.Key),
Hostname = AppUtility.GetServerName(g.Key),
DeviceID = g.Min(a => a.DeviceID).ToString(),
Environment = AppUtility.GetSolutionAndEnvironmentNames(g.Key),
Manufacturer = g.Min(a => a.Manufacturer),
MakeModel = g.Min(a => a.MakeModel),
Location = g.Min(a => a.Location),
count = g.Count()
};
だから私はすべての.min()呼び出しについて心配しています...私はこれらがグループ化のために必要であると推測しましたか?誰かがこれらが必要な理由を説明できますか?私の簡単な例の場合、それらが問題になることはありませんが、実際のデータでは、必要なすべてのフィールドデータを含めることができるようにするためにmin()を複数回呼び出しています...これはそうではないようです良い。
グループ化により、必要な条件(重複する値を識別するためにカウントされる)をテストできますが、このような条件をより直接的に使用して、実際の基になるデータ行に直接アクセスするにはどうすればよいですか?
たとえば、上記で提供した例を見ると、元の「from a in dSource」部分のa.FieldNameを使用できるようにしたいと思いますが、「groupby」を導入した後はアクセスできません。 ?
繰り返しになりますが、情報に感謝します。回答としてマークを付けますが、min()(またはmaxなど)のすべての呼び出しの必要性を誰かが説明できれば、それが私の実際のデータ、これはまだ私が行くべき方法ですか?