【问题标题】:Sorting & Unique Records in LinqLinq 中的排序和唯一记录
【发布时间】:2009-07-01 10:51:34
【问题描述】:

我有一个类似的数据表

public DataTable functiongettable()
{
        DataTable dt = new DataTable();

        dt.Columns.Add("Name");
        dt.Rows.Add("Name1");
        dt.Rows.Add("Name5");
        dt.Rows.Add("Name6");
        dt.Rows.Add("Name3");
        dt.Rows.Add("Name3");
        dt.Rows.Add("Name6");
        dt.Rows.Add("Name3");
        dt.Rows.Add("Name5");
        dt.Rows.Add("Name5");

        return dt;
}

通过使用 linq 查询,我想执行排序并需要唯一记录。

我就是这样的

var query = from c in functiongettable().AsEnumerable().OrderBy("Name").Distinct() select c;

但出现错误:

无法从用法中推断方法“System.Linq.Enumerable.OrderBy(System.Collections.Generic.IEnumerable, System.Func)”的类型参数。尝试明确指定类型参数。

如何解决?

提前致谢

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    尝试在 Distinct 语句中指定 DataRowComparer.Default

    更新:

    排序时使用row.Field("Name")

    再次更新:

    var query = (from c in functiongettable().AsEnumerable()
                orderby c.Field<string>("Name")
                select c).Distinc(DataRowComparer.Default);
    

    【讨论】:

      【解决方案2】:

      您需要将委托传递给OrderBy,而不是string

      试试这个:

              var query = dt.AsEnumerable()
                  .OrderBy(dr => dr.ItemArray[0] as string)
                  .Distinct(DataRowComparer.Default).Select(dr => dr.ItemArray[0]);
      
              foreach (var item in query)
              {
                  Console.WriteLine(item);
              }
      

      【讨论】:

        【解决方案3】:

        您不能在 OrderBy() 中将 String 作为参数传递。您需要像这样传递身份函数:

        functiongettable().AsEnumerable().OrderBy(x=>x.Field<string>("Name")).Distinct()
        

        我不认为你会在这里得到不同的结果,因为方法 Distinct() 将使用 TSource 的默认相等运算符,在这种情况下将是 DataRow。它不会根据您的Name 列的string 值进行独特选择。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-18
          相关资源
          最近更新 更多