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
C# 在DataTable上使用select distinct_C#_Linq - Fatal编程技术网

C# 在DataTable上使用select distinct

C# 在DataTable上使用select distinct,c#,linq,C#,Linq,这是到目前为止我的代码。下一步是浏览名为“studios”的专栏,找出有多少不同的值。我该怎么做呢 我一直在努力,但得到: 无法将lambda表达式转换为字符串类型,因为它不是 委托类型linq 我有使用System.Linq语句也在我的代码中。您可以按工作室列进行分组,然后获得每个工作室名称的计数,如: public static DataTable GetDataTableFromCsv(string path, bool isFirstRowHeader) { string hea

这是到目前为止我的代码。下一步是浏览名为“studios”的专栏,找出有多少不同的值。我该怎么做呢

我一直在努力,但得到:

无法将lambda表达式转换为字符串类型,因为它不是 委托类型linq


我有
使用System.Linq语句也在我的代码中。

您可以按
工作室
列进行分组,然后获得每个工作室名称的计数,如:

public static DataTable GetDataTableFromCsv(string path, bool isFirstRowHeader)
{
    string header = isFirstRowHeader ? "Yes" : "No";

    string pathOnly = Path.GetDirectoryName(path);
    string fileName = Path.GetFileName(path);

    string sql = @"SELECT * FROM [" + fileName + "]";

    using (OleDbConnection connection = new OleDbConnection(
        @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathOnly +
             ";Extended Properties=\"Text;HDR=" + header + "\""))
    using (OleDbCommand command = new OleDbCommand(sql, connection))
    using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
    {
        DataTable dataTable = new DataTable();
        dataTable.Locale = CultureInfo.CurrentCulture;
        adapter.Fill(dataTable);
        return dataTable;
    }                   
}

static void Main(string[] args)
{
    var dir = AppDomain.CurrentDomain.BaseDirectory + @"\classes.csv";
    var test = GetDataTableFromCsv(dir, true);
    var totalclasses = test.Rows.Count;

    Console.Write("Number of Classes: " + totalclasses);
    Console.WriteLine();
    test.Columns[0].ColumnName = "Studios";
    Console.Write("Col1: " + test.Columns[0].ColumnName);
    Console.WriteLine();
    Console.Write("Col2: " + test.Columns[1].ColumnName);                        
}
var distinctValues=test.AsEnumerable()
.GroupBy(r=>r.Field(“工作室”))
.选择(grp=>new
{
Studio=grp.Key,
Count=grp.Count(),
})
.ToList();
foreach(差异值中的var项目)
{
WriteLine(“Studio:{0},编号:{1}”,item.Studio,item.Count);
}

如果列类型不同于字符串,则替换
字段中的
方法

!![在此处输入图像描述][1][1]:我收到此异常。@user1795631,这意味着您的列的类型为
int
。我已经更新了答案,希望它能起作用。@user1795631,
test.Columns[“Studios”]。GetType()
返回?System.Data。DataColumn@hatfieldac,my bad,检查
test.Rows[0][“Studios”].GetType()
并告诉我它返回了什么
var distinctValues = test.AsEnumerable()
                        .GroupBy(r => r.Field<int?>("Studios"))
                        .Select(grp => new
                        {
                            Studio = grp.Key,
                            Count = grp.Count(),
                        })
                        .ToList();

foreach (var item in distinctValues)
{

    Console.WriteLine("Studio : {0}, Number: {1}", item.Studio, item.Count);
}