5

これが私のコードです:

var query = from row1 in table.AsEnumerable()
                         let time = row1.Field<DateTime>("time")
                         let uri = row1.Field<string>("cs-uri-stem")
                         let ip = row1.Field<string>("c-ip")
                         let questionid = row1.Field<int>("questionid")
                         where questionid == int.Parse(table.Rows[x]["questionid"].ToString())
                         select new
                         {
                             time,
                             uri,
                             ip,
                             questionid
                         };

ip列は一意である必要があります。ipフィールドに重複するアイテムを含めることはできません。linqでこれを行うことは可能ですか?

4

3 に答える 3

7

IPアドレスでグループ化することで目的を達成できますが、重複がある場合に他のフィールドをどのように処理するかを知る必要があります.

var query = from row1 in table.AsEnumerable()
                     let time = row1.Field<DateTime>("time")
                     let uri = row1.Field<string>("cs-uri-stem")
                     let ip = row1.Field<string>("c-ip")
                     let questionid = row1.Field<int>("questionid")
                     where questionid == int.Parse(table.Rows[x]["questionid"].ToString())
                     group by ip into g
                     select new
                     {
                         time = g.time.First(),
                         uri = g.uri.First(),
                         ip = g.Key,
                         questionid = g.questionid.First()
                     };
于 2009-10-12T20:47:50.943 に答える
2

Distinct()等値比較子 (つまり、IP 値を比較し、残りを無視するメソッドを渡す) と共に使用することもできます。しかし、tvanfosson が尋ねるように、重複した値を処理するための正しい手順は何ですか?

于 2009-10-12T21:01:13.443 に答える
2

Distinct1 つのフィールドだけでなく、選択したすべてのフィールドに対してのみ実行できます (他のフィールドにはどの値を使用しますか?)。

Distinct拡張メソッドを使用してそれを実現できます。

        var query = (from row1 in table.AsEnumerable()
                     let time = row1.Field<DateTime>("time")
                     let uri = row1.Field<string>("cs-uri-stem")
                     let ip = row1.Field<string>("c-ip")
                     let questionid = row1.Field<int>("questionid")
                     where questionid == int.Parse(table.Rows[x]["questionid"].ToString())
                     select new
                     {
                         time,
                         uri,
                         ip,
                         questionid
                     }).Distinct();
于 2009-10-12T20:42:15.557 に答える