Объединение оператора объединения и выбора в LINQ to SQL

Я использую LINQ to SQL для выполнения выбора данных из нескольких таблиц после выполнения некоторых вычислений на них. При выполнении вычислений в операторе select мне бы хотелось иметь возможность повторно использовать результаты предыдущих вычислений.

Например:

var result = from da in DataA
             join db in DataB
             on da.colA = db.colB
             select new ClassA
             {
                fieldA = da.a + db.b,
                fieldB = fieldA + db.c
             };

Обратите внимание: fieldA и fieldB - это поля в ClassA.

Теперь LINQ to SQL не позволяет второе утверждение:

fieldB = fieldA + db.c

Итак, мне нужно пересчитать значение fieldA для вычисления fieldB как:

fieldB = da.a + db.b + db.c

Есть ли способ для меня, чтобы повторно использовать результаты fieldA, когда я вычисляю значение fieldB в LINQ to SQL?

1 ответ

Решение

let Оператор в LINQ используется для создания временных значений, которые могут быть использованы позже в запросе. В LINQ to Objects это по существу вызывает промежуточное Select который создает новый анонимный объект, содержащий let стоимость, а также исходные значения, так что это не обязательно повышение эффективности. В LINQ to SQL вложенный SELECT используется для вычисления промежуточного выражения.

var result = from da in DataA
             join db in DataB
             on da.colA = db.colB
             let fieldA = da.a + db.b
             select new ClassA
             {
                fieldA,
                fieldB = fieldA + db.c
             };
Другие вопросы по тегам