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

问题描述 投票:2回答:1

我已经在Visual Studio代码上尝试了以下代码,并且已经安装了OmniSharp扩展。我安装了.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? LinQ似乎得到了.Net Framework的支持。但我希望我的webservices API可以在Linux服务器上运行。如果使用您的解决方案有风险,我无法在Linux服务器上运行我的Web服务?

c# .net linq asp.net-core .net-core
1个回答
2
投票

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];
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.