Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用let-in-where子句LinQ的结果_C#_Linq - Fatal编程技术网

C# 使用let-in-where子句LinQ的结果

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

我使用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
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