在LINQ to SQL

时间:2018-04-16 21:10:44

标签: c# linq

我正在使用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的结果?

1 个答案:

答案 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
             };