【问题标题】:Does .Net Core 2.1 Support LINQ and Lambda Expressions?.Net Core 2.1 是否支持 LINQ 和 Lambda 表达式?
【发布时间】:2019-02-18 19:20:09
【问题描述】:

我已经在安装了 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 表达式转换为类型‘字符串’,因为它不是委托类型”。这些是我的使用:

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 服务器上运行我的网络服务?

【问题讨论】:

  • 你试过删除.AsEnumerable()吗?
  • 是的。我试过了。并且 Visual Studio Code 显示错误消息“无法转换 lambda 表达式...”。
  • “无法转换 lambda 表达式...”的完整错误文本是什么?
  • dataTableName的类型是什么?
  • dataTableName 的类型是 System.Data.DataTable。错误文本是“无法将 lambda 表达式转换为类型‘字符串’,因为它不是委托类型 [RestfulAPI]”。

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


【解决方案1】:

DataTable 未在 .NET Core 2.1 中实现枚举器。这个问题在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];
    }
}

【讨论】:

  • 感谢您的回答。你是怎么知道这个信息的?我的意思是“DataTable 没有在 .NET Core 2.1 中实现枚举器。”。微软的文档中没有这个信息。
  • @ONLAEG 他们似乎没有在文档中特别提到它,但这个问题在他们的 Github github.com/dotnet/corefx/issues/19771 上进行了讨论
  • .NET Core 是否普遍支持 LINQ 表达式?
  • @Exa 是的,只是没有使用 Datatables。
  • 看起来这已包含在 .NET Core 3.0 中
猜你喜欢
  • 2011-06-23
  • 2019-06-17
  • 1970-01-01
  • 2017-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多