Я предполагаю, что Вы знаете то, что они делают, и таким образом используются по-другому, таким образом, я собираюсь понять Ваш вопрос как: Когда был бы, это быть хорошей идеей переписать SQL для использования ВО вместо СУЩЕСТВУЕТ, или наоборот.
, который является справедливым предположением?
<час>Редактирование : причина, которую я спрашиваю, состоит в том, что во многих случаях можно переписать SQL на основе В использовать СУЩЕСТВОВАНИЕ вместо этого, и наоборот, и для некоторых механизмов базы данных, оптимизатор запросов будет рассматривать два по-другому.
, Например:
SELECT *
FROM Customers
WHERE EXISTS (
SELECT *
FROM Orders
WHERE Orders.CustomerID = Customers.ID
)
может быть переписан к:
SELECT *
FROM Customers
WHERE ID IN (
SELECT CustomerID
FROM Orders
)
или с соединением:
SELECT Customers.*
FROM Customers
INNER JOIN Orders ON Customers.ID = Orders.CustomerID
, Таким образом, мой вопрос все еще стоит, исходный плакат задается вопросом о том, что В и СУЩЕСТВУЕТ, делает, и таким образом как использовать его, или он спрашивает, существует ли перезапись использования SQL В использовать вместо этого, или наоборот, будет хорошей идеей?
double[][] myArr = Enumerable
.Range(0, rowCount)
.Select(i => new double[colCount])
.ToArray();
То, что у вас есть, не будет работать, так как новый
возникает до вызова Repeat
. Вам нужно что-то, что также повторяет создание массива. Этого можно достичь с помощью метода Enumerable.Range
для создания диапазона и последующего выполнения операции Select
, которая сопоставляет каждый элемент диапазона с новым экземпляром массива. (как в ответ Эми Б. ).
Однако я думаю, что вы пытаетесь использовать LINQ там, где в данном случае это нецелесообразно. То, что у вас было до решения LINQ, прекрасно. Конечно, если вам нужен подход в стиле LINQ, подобный Enumerable.Repeat
, вы можете написать свой собственный метод расширения, который генерирует новый элемент, например:
public static IEnumerable<TResult> Repeat<TResult>(
Func<TResult> generator,
int count)
{
for (int i = 0; i < count; i++)
{
yield return generator();
}
}
Затем вы можете вызвать его следующим образом:
var result = Repeat(()=>new double[rowCount], columnCount).ToArray();
Поведение правильное - Repeat ()
возвращает последовательность, содержащую предоставленный объект несколько раз. Вы можете проделать следующий трюк.
double[][] myArr = Enumerable
.Repeat(0, rowCount)
.Select(i => new double[colCount])
.ToArray();
Вы не можете сделать это с помощью метода Repeat
: параметр element
оценивается только один раз , поэтому на самом деле он всегда повторяет один и тот же экземпляр. Вместо этого вы можете создать метод, который будет делать то, что вы хотите, который будет принимать лямбда вместо значения:
public static IEnumerable<T> Sequence<T>(Func<T> generator, int count)
{
for (int i = 0; i < count; i++)
{
yield return generator();
}
}
...
var myArr = Sequence(() => new double[colCount], rowCount).ToArray();