【问题标题】:Where clause on Linq Extension methodLinq 扩展方法的 Where 子句
【发布时间】:2013-02-04 22:22:07
【问题描述】:

我有以下 lambda 表达式:

query = query.Join( SecondTableSource,
table1 => new
{
    table1 .Field1,
    table1 .Field2
},
table2 => new
{
    table2 .Field1,
    table2 .Field2
},
( table1 , table2 ) => table1 ) ;

如您所见,我只返回第一个表的结果,但我需要按 table2 中的列过滤掉结果。我将如何去做,但仍然只返回 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 时,两者都只返回一个结果(正如由原始查询)。

【问题讨论】:

  • 您能否提供一些示例数据,以便我们了解您的目标?

标签: c# linq join where


【解决方案1】:

不能先过滤table2吗?

query = query.Join(SecondTableSource.Where(table2 => table2.MyFieldToFilter == condition),
                   table1 => ...,
                   ...);

【讨论】:

  • 嗯,看起来很简单,让我试一试。谢谢!
  • 看起来它应该可以工作,但它没有返回正确的结果。
【解决方案2】:

如果您有更复杂的查询,这里是另一种选择...

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);

【讨论】:

    猜你喜欢
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多