Вы можете перебрать массив объектов и использовать indexOf , чтобы проверить, присутствует ли свойство name текущего объекта в массиве строк
var objects = [{name:'a',is:false},{name:'b',is:false},{name:'c',is:false}];
var strings = ['a','b'];
objects.forEach(function(obj) {
if (strings.indexOf(obj.name)!=-1) obj.is = true;
})
console.log(objects);
До Microsoft устраняют эту проблему, вот работа вокруг:
Создайте свой собственный Дополнительный метод, который использует метод CopyToDataTable, если существуют DataRows, если нет, то он возвращает пустой DataTable.
VB.NET
Imports System.Data
Namespace CustomExtensions
Public Module DataRowExtensionsOverride
<System.Runtime.CompilerServices.Extension()> _
Public Function CopyToDataTableOverride(Of T As DataRow)(ByVal Source As EnumerableRowCollection(Of T)) As DataTable
If Source.Count = 0 Then
Return New DataTable
Else
Return DataTableExtensions.CopyToDataTable(Of DataRow)(Source)
End If
End Function
End Module
End Namespace
C#;
public static class DataRowExtensionsOverride
{
public static DataTable CopyToDataTableOverride<T>(this IEnumerable<T> Source) where T : DataRow {
if (Source.Count() == 0) {
return new DataTable();
} else {
return DataTableExtensions.CopyToDataTable<T>(Source);
}
}
}
someDataTable.AsEnumerable().Where(r => r.Field<string>("SomeField") == "SomeValue").AsDataView().ToTable();
.AsDataView().ToTable()
возвращает пустую таблицу с той же структурой, что и someDataTable
, если есть строки, возвращенные из .Where()
Сегодня я столкнулся с этой проблемой и разработал обходной путь , если это поможет.
Извините, но блог написан на C #, но я просто использовал IEnumerable для переменной LINQ и проверил .Current, чтобы увидеть, вернул ли он какие-либо строки.