我需要从
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();
System.InvalidCastException:无法将类型“DefaultIfEmptyIterator`1[System.Data.DataRow]”的对象强制转换为类型“System.Data.DataRow”。
请让我知道如何解决这个问题。
确保有默认值
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 此处