Linq Extension方法上的Where子句
本文关键字:Where 子句 Extension 方法 Linq | 更新日期: 2023-09-27 17:57:29
我有以下lambda表达式:
query = query.Join( SecondTableSource,
table1 => new
{
table1 .Field1,
table1 .Field2
},
table2 => new
{
table2 .Field1,
table2 .Field2
},
( table1 , table2 ) => table1 ) ;
正如您所看到的,我只返回第一个表的结果,但我需要按表2中的一列过滤掉结果。我该怎么做,但仍然只回来IQueryable<table1>
?
谢谢!
这是我试图转换的原始代码:
query = from table1 in Model.Table1s
join table2 in Model.Table2s
on new
{
table1.field1,
table1.field2
}
equals
new
{
table2.field1,
table2.Part
}
where table2.field.StartsWith( criteria.value )
select table1;
我想我一定没有正确转换,因为发布的前两个答案(这是我写这篇文章时发布的全部内容)应该有效,但当我期望4时,两个答案都只返回一个结果(原始查询返回)。
之前过滤表2,不是吗?
query = query.Join(SecondTableSource.Where(table2 => table2.MyFieldToFilter == condition),
table1 => ...,
...);
如果您有更复杂的查询,这里还有另一个选项。。。
IEnumerable<MyType1> result = table1.Join(table2,
t1 => new { t1.Field1, t1.Field2 },
t2 => new { t2.Field1, t2.Field2 },
(t1, t2) => new { table1 = t1, table2 = t2 }).
Where(joinedResults => joinedResults.table2 == //condition).
Select(filteredResults => filteredResults.table1);