C# 使用let-in-where子句LinQ的结果
我使用LINQtoSQL从数据表中获取数据。我想在where子句中使用let语句的结果 例如: 表1中t1的C# 使用let-in-where子句LinQ的结果,c#,linq,C#,Linq,我使用LINQtoSQL从数据表中获取数据。我想在where子句中使用let语句的结果 例如: 表1中t1的 将t2加入表2中 在t1.field1上等于t2.field2 让计算值=t2.val1+t2.val2 在表3中加入t3 在t2.somefield上等于t3.somefield 进入t3Grp 从t3Grp.DefaultIfEmpty()中的子3开始 [选择表3中的行,其中table3.someValue
将t2加入表2中
在t1.field1上等于t2.field2
让计算值=t2.val1+t2.val2
在表3中加入t3
在t2.somefield上等于t3.somefield
进入t3Grp
从t3Grp.DefaultIfEmpty()中的子3开始
[选择表3中的行,其中table3.someValue
calculatedValue中我面临的问题在表3的.Where()
子句中无法访问。我想要完全左连接输出(即,即使表3中没有包含someValue
的行,我也希望在输出中包含该行。请帮助。尝试以下操作:
from t1 in table1
join t2 in table2
on t1.field1 equals t2.field2
let calculatedValue = t2.val1 + t2.val2
join t3 in table3.where(item => item.someValue < calculatedValue)
on t2.somefield equals t3.somefield
into t3Grp
from subt3 in t3Grp.DefaultIfEmpty()
select new
{
val1= table3.val1,
val2 = table3.val2,
.
.
.
}
表1中t1的
将t2加入表2中
在t1.field1上等于t2.field2
让计算值=t2.val1+t2.val2
将t3加入表3中,其中(item=>item.someValue
试试这个:
from t1 in table1
join t2 in table2
on t1.field1 equals t2.field2
let calculatedValue = t2.val1 + t2.val2
join t3 in table3.where(item => item.someValue < calculatedValue)
on t2.somefield equals t3.somefield
into t3Grp
from subt3 in t3Grp.DefaultIfEmpty()
select new
{
val1= table3.val1,
val2 = table3.val2,
.
.
.
}
表1中t1的
将t2加入表2中
在t1.field1上等于t2.field2
让计算值=t2.val1+t2.val2
将t3加入表3中,其中(item=>item.someValue
您可以通过在最后的选择中限制t3Grp
来做到这一点,例如:
from t1 in table1
join t2 in table2
on t1.field1 equals t2.field2
let calculatedValue = t2.val1 + t2.val2
join t3 in table3
on t2.somefield equals t3.somefield
into t3Grp
from subt3 in t3Grp.DefaultIfEmpty()
select new { t1, t2, t3Grp = t3Grp.Where(t3 => t3.someValue < calculatedValue) }
表1中t1的
将t2加入表2中
在t1.field1上等于t2.field2
让计算值=t2.val1+t2.val2
在表3中加入t3
在t2.somefield上等于t3.somefield
进入t3Grp
从t3Grp.DefaultIfEmpty()中的子3开始
选择新的{t1,t2,t3Grp=t3Grp.Where(t3=>t3.someValue
该值在范围内,我只是不确定您想要的确切投影。您可以通过在最终的选择中限制t3Grp
来实现这一点,例如
from t1 in table1
join t2 in table2
on t1.field1 equals t2.field2
let calculatedValue = t2.val1 + t2.val2
join t3 in table3
on t2.somefield equals t3.somefield
into t3Grp
from subt3 in t3Grp.DefaultIfEmpty()
select new { t1, t2, t3Grp = t3Grp.Where(t3 => t3.someValue < calculatedValue) }
表1中t1的
将t2加入表2中
在t1.field1上等于t2.field2
让计算值=t2.val1+t2.val2
在表3中加入t3
在t2.somefield上等于t3.somefield
进入t3Grp
从t3Grp.DefaultIfEmpty()中的子3开始
选择新的{t1,t2,t3Grp=t3Grp.Where(t3=>t3.someValue
该值在这里的范围内,我只是不确定您想要的确切投影。我认为左连接行为将丢失,除非where条件在table.where中指定为“join t3”(I=>I.someValuei==null?i.someValue==null:i.someValueI.someValuei==null?i.someValue==null:i.someValue