Поддерживает ли .Net Core 2.1 LINQ и лямбда-выражения? - PullRequest
0 голосов
/ 14 сентября 2018

Я пробовал следующий код на 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 ().И было показано сообщение «Невозможно преобразовать лямбда-выражение в тип« строка », потому что это не тип делегата».Это мое использование:

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

Как я могу использовать LinQ на .Net Core?Похоже, что LinQ поддерживается .Net Framework.Но я хочу, чтобы мой API веб-сервисов мог работать на сервере Linux.Есть риск, если вы воспользуетесь вашим решением, я не смогу запустить свои веб-сервисы на сервере Linux?

1 Ответ

0 голосов
/ 14 сентября 2018

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];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...