除了您没有将结果集重新分配给result
-variable 的小错误。
如果您实际上应该收到不同的值,我个人觉得使用不同的值要清楚得多。在这种情况下使用 Groupby 并不是很清楚,如果要返回整行,请查看下面的第一个示例,否则请查看第二个示例。
class Program
{
static DataTable GetData()
{
DataTable table = new DataTable();
table.Columns.Add("Visits", typeof(int));
table.Columns.Add("URL_Link", typeof(string));
table.Rows.Add(57, "yahoo.com");
table.Rows.Add(130, "google.com");
table.Rows.Add(92, "google.com");
table.Rows.Add(25, "home.live.com");
table.Rows.Add(30, "stackoverflow.com");
table.Rows.Add(1, "stackoverflow.com");
table.Rows.Add(7, "mysite.org");
return table;
}
static void Main(string[] args)
{
var res = GetData()
.AsEnumerable()
.GroupBy(row => row.Field<string>("URL_Link"))
.Select(grp => grp.First());
foreach (var item in res)
{
string text = "";
foreach (var clm in item.ItemArray)
text += string.Format("{0}\t", clm);
Console.WriteLine(text);
}
Console.ReadLine();
}
}
这或多或少正是您已经提供的。首先,您没有重新分配变量。然后你应该从 ItemArray 到达你的字段。您会看到上面的示例,它给出了以下输出:
57 yahoo.com
130 google.com
25 home.live.com
30 stackoverflow.com
7 mysite.com
请记住,您可能必须指定 Select、Orderby 和 Where 子句,具体取决于您是否需要返回这些行中的特定行(即访问次数最多的重复行)。
如果URL_Link
是您需要或想要从不同结果返回的唯一字段,则此示例清晰明了。它只需要选择您不想要的字段,然后区分它。
static void Main(string[] args)
{
var res = GetData()
.AsEnumerable()
.Select(d=>d.Field<string>("URL_Link"))
.Distinct();
foreach (var item in res)
Console.WriteLine(item.ToString());
Console.ReadLine();
}