Используйте regex для решения этой проблемы путем сопоставления только чисел. match
вернет массив чисел, поэтому используйте оператор распространения , чтобы установить для всех параметров значение Date.
const res = new Date(...'new Date(0,0,0,11,13,16)'.match(/[0-9]+/g));
console.log(res);
Проблема состоит в том что LINQ через дополнительные методы на IEnumerable<T>
, знает, как создать Массивы, Списки и Словари, это не знает, как создать Ваш пользовательский набор. У Вас мог быть свой пользовательский набор, имеют конструктора, который берет IEnumerable<T>
или Вы могли записать Вам. Первый позволил бы Вам использовать результат LINQ в своем конструкторе непосредственно, последний позволит Вам украшать оператор LINQ своим расширением и возвращать набор, которого Вы требуете. Так или иначе необходимо будет сделать своего рода преобразование от универсального набора до специализированного набора - или в конструкторе или в расширении. Или Вы могли сделать обоих...
public static class MyExtensions
{
public static ProductCollection
ToProducts( this IEnumerable<Product> collection )
{
return new ProductCollection( collection );
}
}
public class ProductCollection : BaseCollection<Product>
{
...
public ProductCollection( IEnumerable<Product> collection )
: base( collection )
{
}
...
}
var products = (from p in HugeProductCollection
where p.Vendor = currentVendor
select p).ToProducts();
Я могу предложить Вас путь в этом, Вы не должны перечислять набор 2 раза:
abstract class BaseCollection<T> : List<T>
{
public BaseCollection(IEnumerable<T> collection)
: base(collection)
{
}
}
class PruductCollection : BaseCollection<Product>
{
public PruductCollection(IEnumerable<Product> collection)
: base(collection)
{
}
}
var products = from p in HugeProductCollection
where p.Vendor = currentVendor
select p;
PruductCollection objVendorProducts = new PruductCollection(products);