Объединение оператора объединения и выбора в 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
};