Существует ли эквивалент LINQPad классу DataContext?

Я бы использовал .reduce. Сначала разделите начальную строку запятыми. Если для перебираемой строки нет -, просто введите число в накопитель; в противном случае разделите на -, чтобы получить числа low и high, затем используйте петлю for, чтобы протолкнуть все числа от low до high к аккумулятору:

]

const ToInt = Number;

const numArr = "7, 20, 22, 30–31, 33, 39–40, 46".split(', ');
const result = numArr.reduce((a, str) => {
  if (!str.includes('–')) {
    a.push(ToInt(str));
    return a;
  }
  const [low, high] = str.split('–');
  for (let i = Number(low); i <= high; i++) {
    a.push(i);
  }
  return a;
}, []);
console.log(result);

Если по какой-то причине вы не хотите использовать ES6, вы можете преобразовать его в ES5 с помощью Вавилона :

"use strict";

function _slicedToArray(arr, i) {
  return (
    _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest()
  );
}

function _nonIterableRest() {
  throw new TypeError("Invalid attempt to destructure non-iterable instance");
}

function _iterableToArrayLimit(arr, i) {
  var _arr = [];
  var _n = true;
  var _d = false;
  var _e = undefined;
  try {
    for (
      var _i = arr[Symbol.iterator](), _s;
      !(_n = (_s = _i.next()).done);
      _n = true
    ) {
      _arr.push(_s.value);
      if (i && _arr.length === i) break;
    }
  } catch (err) {
    _d = true;
    _e = err;
  } finally {
    try {
      if (!_n && _i["return"] != null) _i["return"]();
    } finally {
      if (_d) throw _e;
    }
  }
  return _arr;
}

function _arrayWithHoles(arr) {
  if (Array.isArray(arr)) return arr;
}

var ToInt = Number;
var numArr = "7, 20, 22, 30–31, 33, 39–40, 46".split(", ");
var result = numArr.reduce(function(a, str) {
  if (str.indexOf("–") === -1) {
    a.push(ToInt(str));
    return a;
  }

  var _str$split = str.split("–"),
    _str$split2 = _slicedToArray(_str$split, 2),
    low = _str$split2[0],
    high = _str$split2[1];

  for (var i = Number(low); i <= high; i++) {
    a.push(i);
  }

  return a;
}, []);
console.log(result);

(но версия ES6 более краткая и, вероятно, много легче читать и понимать)

23
задан Lucas 12 May 2009 в 13:32
поделиться

2 ответа

Краткий ответ : Вам не нужно создавать DataContext самостоятельно. LINQPad поставляется с множеством примеров, взгляните на них.

Когда вы подключаете LINQPad к базе данных, он создает для вас DataContext. Таблицы DataContext ( Table ) и SubmitChanges () доступны как локальные члены.

Например, для режима «Выражение C #» LINQPad по умолчанию вы можете просто написать:

from p in Person
where p.Name == "Joe"
select p.Address

В режиме «Оператор C #» LINQPad:

var query = from p in Person
            where p.Name == "Joe"
            select p.Address;

query.Dump(); // Dump() shows results below

Person joe = query.First();
joe.Name = "Peter";
SubmitChanges();

joe.Dump(); // shows joe's values under the previous query results

Метод расширения LINQPad Dump () очень полезен, его можно вызвать для любого объекта или коллекции (в режиме оператора LINQPad), чтобы показать результаты ниже.

Обратите внимание, что вам даже не нужно подключаться в базу данных, чтобы использовать LINQPad. Вы можете работать с коллекциями в памяти:

int[] numbers = new[] { 1, 2, 3, 4, 5 };
numbers.Where(n => n > 3).Select(n => n * 2).Dump();

Фактически, вам даже не нужно использовать LINQ для использования LINQPad. Он также отлично работает как компилятор сниппетов.

s Метод расширения Dump () очень полезен, его можно вызвать для любого объекта или коллекции (в режиме оператора LINQPad), чтобы показать результаты ниже.

Обратите внимание, что вам даже не нужно подключаться к база данных для использования LINQPad. Вы можете работать с коллекциями в памяти:

int[] numbers = new[] { 1, 2, 3, 4, 5 };
numbers.Where(n => n > 3).Select(n => n * 2).Dump();

Фактически, вам даже не нужно использовать LINQ для использования LINQPad. Он также отлично работает как компилятор сниппетов.

s Метод расширения Dump () очень полезен, его можно вызвать для любого объекта или коллекции (в режиме оператора LINQPad), чтобы показать результаты ниже.

Обратите внимание, что вам даже не нужно подключаться к база данных для использования LINQPad. Вы можете работать с коллекциями в памяти:

int[] numbers = new[] { 1, 2, 3, 4, 5 };
numbers.Where(n => n > 3).Select(n => n * 2).Dump();

Фактически, вам даже не нужно использовать LINQ для использования LINQPad. Он также отлично работает как компилятор сниппетов.

31
ответ дан 29 November 2019 в 00:52
поделиться

Я знаю, что на этот вопрос уже есть ответ, и я согласен с Лукасом, но хотел добавить пару вещей, которые могут помочь читателям этого вопроса.

Вы можете загрузить свой собственный DataContext из сборки если вы хотите. Независимо от того, загружаете ли вы свой собственный контекст или позволяете LinqPad создать его для вас, вы работаете в контексте класса «UserQuery», который генерируется LinqPad.

Следующий статус C # показывает это:

  this.GetType().Name.Dump();  // Shows UserQuery

Этот класс UserQuery происходит от DataContext. В этом примере я позволил Linqpad создать контекст данных для базы данных AdventureWorks:

  this.GetType().BaseType.Dump();  // Shows TypedDataContext

Если я загружу свой собственный DataContext с именем MyDataContext:

  this.GetType().BaseType.Dump();  // Shows MyDataContext
16
ответ дан 29 November 2019 в 00:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: