使用相同条件在linq中按对象和相关对象进行过滤

时间:2014-05-12 11:55:01

标签: c# linq

在我正在处理的MVC应用中,我有两个模型,比方说FooFooBarFooFooBar相关的一对多(FooBar s具有存储Foo ID的属性。

我在服务中保存了一些奇特的Where条件作为静态函数:

public static System.Linq.Expressions.Expression<Func<Foo, bool>> FancyCondition(int input)
{
    return(x => x.Prop1 == input);
}

我是这样写的,因为我期待重复使用它。它在过滤Foo个对象时确实有效。我这样用它:

var results = dbContex.Foo.Where(FancyCondition(4));

但是现在我需要应用这个条件来过滤FooBar类型的对象,我无法弄清楚如何做到这一点。当然,我可以复制条件,将所有字段和属性从x.PropertyName调整为x.Foo.PropertyName,但这听起来不错。


让我重新解释一下我的问题。我有过滤对象Foo的条件,我有FooBar类型的对象,它们总是只与一个Foo对象相关。我想使用相同的条件过滤FooBar类型的对象,但我不知道如何使用单个代码实现它。

2 个答案:

答案 0 :(得分:0)

由于它是强类型的,你需要一个能够将Foo转换为FooBar的转换器(例如隐式转换运算符)。或者你可以使用动态。

答案 1 :(得分:0)

我和办公室里的其他人谈到了这个问题,他说&#34;如果是SQL查询,你会怎么解决?&#34;。这立即引导我找到解决方案,我可以使用Join

IQueryable<FooBar> foobars = dbContex.FooBar.Join<FooBar, Foo, int?, FooBar>(dbContext.Foo.Where(FancyCondition(4)), x => x.FooId, y => y.Id, (x, y) => x);

所以我的错误在于思考如何使用linq解决它,而不是如何使用SQL解决它,然后将其转换为linq。

当然,我愿意接受有关如何实现这一目标的替代建议(特别是那些比我更好的建议)。