List<DataRow>.DefaultIfEmpty() 显示错误

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

我需要从

DataRow
对象获取一个新的
List<DataRow>

Data
有 5 条记录。

public List<DataRow> Data { get; set; } = new();

private DataRow GetDataRow(COAClassRecord _Record)
{
    DataRow _DataRow = (DataRow)Data.DefaultIfEmpty();
    _DataRow["Id"] = _Record.ID;
    _DataRow["Code"] = _Record.Code;
    _DataRow["Title"] = _Record.Title;
    return _DataRow;
}

但是我在这一行遇到错误:

DataRow _DataRow = (DataRow)Data.DefaultIfEmpty();

enter image description here

System.InvalidCastException:无法将类型“DefaultIfEmptyIterator`1[System.Data.DataRow]”的对象强制转换为类型“System.Data.DataRow”。

请让我知道如何解决这个问题。

c# list casting defaultifempty
1个回答
0
投票

确保有默认值

DataRow
,以防您的退货列表为空。这样,您就可以使用
FirstOrDefault
DataRow
获取
IEnumerable
,类型为
<T>

首先,在 C# 中创建一个类,如下所示:

public class COAClassRecord
{
    public int ID { get; set; }
    public string Code { get; set; }
    public string Title { get; set; }
}

然后,将其引用到您的程序,如下所示:

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;

public class Program
{
    public static void Main()
    {
        Sample example = new Sample();
        COAClassRecord record = new COAClassRecord { ID = 1, Code = "ABC", Title = "Sample Title" };
        DataRow row = example.GetDataRow(record);        
        Console.WriteLine($"Id: {row["Id"]}, Code: {row["Code"]}, Title: {row["Title"]}");
    }
}

public class Sample
{
    public List<DataRow> Data { get; set; } = new();

    public DataRow GetDataRow(COAClassRecord _Record)
    {
        DataRow _DataRow = Data.DefaultIfEmpty(CreateDefaultDataRow()).FirstOrDefault();
        if (_DataRow != null)
        {
            _DataRow["Id"] = _Record.ID;
            _DataRow["Code"] = _Record.Code;
            _DataRow["Title"] = _Record.Title;
        }
        return _DataRow;
    }

    private DataRow CreateDefaultDataRow()
    {
        
        DataTable table = new DataTable();
        table.Columns.Add("Id", typeof(int));
        table.Columns.Add("Code", typeof(string));
        table.Columns.Add("Title", typeof(string));

        
        return table.NewRow();
    }
}

请参阅工作 .netfiddle 此处

© www.soinside.com 2019 - 2024. All rights reserved.