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在您选择的所有字段上执行 a,而不仅仅是在一个字段上(您将为其他字段采用哪些值?)。

您可以通过使用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 回答
2

您还可以使用Distinct()相等比较器(即,传入将比较 IP 值的方法,而忽略其余部分)。但正如 tvanfosson 所问,处理重复值的正确程序是什么?

于 2009-10-12T21:01:13.443 回答