Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq查询组由多个列组成_Linq - Fatal编程技术网

Linq查询组由多个列组成

Linq查询组由多个列组成,linq,Linq,我有一个字符串数组,比如: String[] Fields=new String[]{RowField,RowField1} 其中,我可以使用以下查询通过指定值为query(即RowField和RowField1)来获取值: var Result = ( from x in _dataTable.AsEnumerable() select new { Name = x.Field<object>(RowField), Name1 = x.Field<obje

我有一个字符串数组,比如:

String[] Fields=new String[]{RowField,RowField1}
其中,我可以使用以下查询通过指定值为query(即RowField和RowField1)来获取值:

var Result = (
from x in _dataTable.AsEnumerable()
select new
{
    Name = x.Field<object>(RowField), 
    Name1 = x.Field<object>(RowField1)
})
.Distinct();
在不指定查询中的每个行字段的情况下,如何使用此处的查询? 如何遍历LINQ中的数组项

根据中的一些建议,我尝试使用下面的代码获得结果

var result = (from row in _dataTable.AsEnumerable()
                 let projection = from fieldName in fields
                      select new {Name = fieldName, Value = row[fieldName]}
                 select projection.ToDictionary(p=>p.Name,p=>p.Value))
             .Distinct();  

但问题是它不会返回不同的值。有什么想法吗?

从不同的
数据行开始,使用:

其中
DataRowEqualityComparer
是:

public class DataRowEqualityComparer : IEqualityComparer<DataRow>
{
    public bool Equals(DataRow x, DataRow y)
    {
        return x.ItemArray.SequenceEqual(y.ItemArray);
    }

    public int GetHashCode(DataRow obj)
    {
        return string.Join("", obj.ItemArray).GetHashCode();
    }
}
公共类DataRowEqualityComparer:IEqualityComparer
{
公共布尔等于(数据行x、数据行y)
{
返回x.ItemArray.SequenceEqual(y.ItemArray);
}
public int GetHashCode(DataRow obj)
{
返回字符串.Join(“,obj.ItemArray).GetHashCode();
}
}
_dataTable.AsEnumerable().Distinct(new DataRowEqualityComparer())
public class DataRowEqualityComparer : IEqualityComparer<DataRow>
{
    public bool Equals(DataRow x, DataRow y)
    {
        return x.ItemArray.SequenceEqual(y.ItemArray);
    }

    public int GetHashCode(DataRow obj)
    {
        return string.Join("", obj.ItemArray).GetHashCode();
    }
}