.NET Core 2.1是否支持LINQ和Lambda表达式?

4

我已经在安装了OmniSharp扩展的Visual Studio Code上尝试了以下代码。我安装了 .Net core 2.1.3。

List<MyType> listName = dataTableName.AsEnumerable().Select(m => new MyType()
{
    ID = m.Field<string>("ID"),
    Description = m.Field<string>("Description"),
    Balance = m.Field<double>("Balance"),
}).ToList()

但似乎不能使用AsEnumerable()方法。并且会显示消息“无法将Lambda表达式转换为类型'string',因为它不是委托类型”。这是我的代码:

using System.Linq;
using System.Data;
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
using RestfulAPI.Commons;
using RestfulAPI.Models.DBModels;

如何在 .Net Core 上使用 LinQ? 看起来 LinQ 受到 .Net Framework 的支持。但我希望我的 Web 服务 API 能够在 Linux 服务器上运行。如果使用您的解决方案,是否存在风险导致我不能在 Linux 服务器上运行我的 Web 服务?


你尝试过移除“.AsEnumerable()”吗? - Brad
是的,我已经尝试过了。Visual Studio Code显示错误消息“无法转换lambda表达式...”。 - ONLAEG
“Cannot convert lambda expression” 的完整错误文本是什么? - Shaun Luttin
dataTableName 的类型是什么? - Shaun Luttin
dataTableName的类型是System.Data.DataTable。错误文本为“无法将lambda表达式转换为类型'string',因为它不是委托类型[RestfulAPI]”。 - ONLAEG
1个回答

2
在 .NET Core 2.1 中,DataTable 没有实现枚举器。这个问题在 Dotnet Github 上仍然存在,可能会在以后的版本中得到解决。
这意味着你需要使用循环来遍历行。由于 DataTable 也没有实现 IEnumerable,所以无法使用 foreach。
例如:
for(int i = 0; i < dataTable.Rows.Count; i++)
{
    var row = dataTable.Rows[i];

    var temp = new MyType(){
        ID = row["ID"],
        Description = row["Description"],
        Balance = Double.Parse(row["Balance"].ToString())
     };

     retList.Add(temp);     
}

你也可以编写自己的AsEnumerable扩展方法:
public static IEnumerable<DataRow> AsEnumerable(this DataTable table)
{
    for (int i = 0; i < table.Rows.Count; i++)
    {
        yield return table.Rows[i];
    }
}

谢谢你的回答。你是怎么知道这个信息的?我的意思是,“在.NET Core 2.1中,DataTable没有实现枚举器。”在微软的文档中没有这个信息。 - ONLAEG
1
@ONLAEG,他们在文档中似乎没有特别提到这个问题,但是这个问题已经在他们的Github上进行了讨论https://github.com/dotnet/corefx/issues/19771。 - Nic
.NET Core通常支持LINQ表达式吗? - Exa
1
@Exa 是的,它们是兼容的,只是不适用于Datatables。 - Nic
看起来这已经作为 .NET Core 3.0 的一部分被包含了。 - Jordan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接