我正在使用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
当我在LINQ to SQL中计算fieldB的值时,有没有办法重用fieldA的结果?
答案 0 :(得分:2)
LINQ中的let
语句用于创建可在以后查询中使用的临时值。在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
};