C# 使用LINQ综合查询从C数据表中获取不同的行

C# 使用LINQ综合查询从C数据表中获取不同的行,c#,linq,datatable,C#,Linq,Datatable,我有一个C的数据表。只是想得到这个数据表的列属性上的不同行列表。比如说,我有一个列属性为x,y和z的数据表。我在那个数据表中有200行,它们具有相同的x值。我希望在LINQ综合查询中使用基于x列属性的独特行,并将其绑定到我拥有的模型列表中 我有一个模型 public class Model { public Model(string x) { X= x; } public int X{ get; set; }

我有一个C的数据表。只是想得到这个数据表的列属性上的不同行列表。比如说,我有一个列属性为x,y和z的数据表。我在那个数据表中有200行,它们具有相同的x值。我希望在LINQ综合查询中使用基于x列属性的独特行,并将其绑定到我拥有的模型列表中

我有一个模型

  public class Model
    {

      public Model(string x)
      {
          X= x;

      }
      public int X{ get; set; }
      public string Y{ get; set; }
      public decimal Z{ get; set; }

    }
我被这个全面的查询困住了。它应该给出一个清晰的列表,但并没有按预期工作

List<Model> modelList= new List<Model>();

        modelList= (from item in response.AsEnumerable()
                         select new
                         {
                             description = DataTableOperationHelper.GetStringValue(item, "description")
                         }).Distinct().Select(m => new Model(m.description)).ToList();
其中DataTable响应有200行,“description”是其列属性之一。

它给出了“描述”属性的列表,但没有明确的值。有什么我不想考虑的吗?


卡得很严重。

这是因为这个代码

new
{
    description = DataTableOperationHelper.GetStringValue(item, "description")
}
创建具有属性描述的新对象,并按引用进行比较,但不按描述值进行比较

试试这个:

ModelList = response.AsEnumerable()
 .Select(item=>DataTableOperationHelper.GetStringValue(item, "description"))
 .Distinct()
 .Select(x => new ConsumablesViewModel(x.description))
 .ToList();

什么是响应对象,请在此共享详细的代码,其中“response”是一个有200行的数据表,“description”是它的列属性之一。您能给出一个重现问题的最小示例输入吗?@sloth,我已经简化了我的问题,减少了一些部分。看看你是否可以帮助我。除此之外,我如何区分基于属性“x”的列表模型列表。这对我也有帮助。@user3157277抱歉,我不明白为什么你的代码不能工作。这就是为什么我要求提供一个重现您的问题的示例输入。要在单个属性上使用Distinct,您必须提供适当的IEqualityComparer以使用Distinct或GroupBy。stackoverflow上可能有1000个问题询问此问题。它显示错误:“string”不包含“description”的定义,并且找不到接受“string”类型第一个参数的扩展方法“description”?是否缺少using指令或程序集引用?它按引用进行比较,但不按的值进行比较描述这是错误的。将使用等于,如果相同匿名类型的两个实例的属性相等,则它们相等。@user3157277这是因为第二个Select中的x是字符串。Selectx=>new ConsumablesViewModelx将编译。@sloth,你知道我如何解决这个问题吗?如果可以,请帮助。