我有一个单项数组,我将其与更新的项数组进行比较以确定更改列的不同列表。它正在工作。
但是我需要从这一行中构建两个对象,因为我需要将两个对象发送到我用来发送电子邮件的 API。一个用于旧值,一个用于新值。我尝试了两种不同的方式:
var updates = currentRow.ItemArray
.Select((o, i) => new { Row = o, Index = i })
.Where(r => (r.Row == null && updatedRow[r.Index] != null)
|| (r.Row != null && updatedRow[r.Index] != null
&& !r.Row.Equals(updatedRow[r.Index])))
.Select(r => new AppServices.NotificationData[]
{
new AppServices.NotificationData
{
Key = string.Format("{0}OldValue",
columns[r.Index].ColumnName.EmailTemplateName(type)),
Value = Convert.ToString(currentRow[r.Index])
},
new AppServices.NotificationData
{
Key = string.Format("{0}NewValue",
columns[r.Index].ColumnName.EmailTemplateName(type)),
Value = Convert.ToString(updatedRow[r.Index])
}
});
但实际上,正如预期的那样,老实说,这给了我一个可枚举的数组。我也试过这样:
var updates = currentRow.ItemArray
.Select((o, i) => new { Row = o, Index = i })
.Where(r => (r.Row == null && updatedRow[r.Index] != null)
|| (r.Row != null && updatedRow[r.Index] != null
&& !r.Row.Equals(updatedRow[r.Index])))
.Select(r => new AppServices.NotificationData
{
Key = string.Format("{0}OldValue",
columns[r.Index].ColumnName.EmailTemplateName(type)),
Value = Convert.ToString(currentRow[r.Index])
})
.Select(r => new AppServices.NotificationData
{
Key = string.Format("{0}NewValue",
columns[r.Index].ColumnName.EmailTemplateName(type)),
Value = Convert.ToString(updatedRow[r.Index])
});
但这里的问题是第二个从前一个选择Select
中传入对象,所以实际上不是项目数组。NotificationData
r
这里currentRow
和updatedRow
是分别DataRow
代表旧数据和新数据的对象。
我确信有办法得到我所追求的,我只是不知道如何。
那么,我如何获得一个Select
为返回单一类型而构建的 ,以返回同一对象的两个实例,以便最终可枚举为IEnumerable<NotificationData>
?