c# - .Net Core 2.1 是否支持 LINQ 和 Lambda 表达式?

标签 c# .net linq asp.net-core .net-core

我已经在安装了 OmniSharp 扩展的 Visual Studio Code 上尝试了以下代码。我安装了 .Net 核心 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’,因为它不是委托(delegate)类型”。这些是我的使用:

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

如何在 .Net Core 上使用 LinQ? .Net Framework 似乎支持 LinQ。但我希望我的 webservices API 可以在 Linux 服务器上运行。如果使用您的解决方案有风险,我无法在 Linux 服务器上运行我的 Web 服务?

最佳答案

DataTable 未在 .NET Core 2.1 中实现 Enumerator。此问题已在 Dotnet Github 中打开,因此可能有一天会实现。

这意味着您将需要使用循环来遍历行。您不能使用 foreach,因为 DataTable 也没有实现 IEnumerable

例如:

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];
    }
}

关于c# - .Net Core 2.1 是否支持 LINQ 和 Lambda 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52324157/

相关文章:

c# - 将 JSON 转换为 C# 复杂对象

c# - Windows IoT 上的 Windows Universal App 中的屏幕键盘?

c# - 如何将 String[] 转换为 IDictionary<String, String>?

c# - Linq 按日期分组(月)

linq - 我们可以使用LINQ过滤数据表吗?

c# - MenuItem.IsEnabled 绑定(bind)到公共(public) bool 值

c# - Margin 和 Padding 是由 ContentControl 实现的吗?

c# - linq匿名方法中的局部变量范围(闭包)

c# - LINQ:获取表详细信息

c# - 从字典中获取第一个元素