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

C# 使用相同条件在linq中按对象和相关对象过滤,c#,linq,C#,Linq,在我正在开发的MVC应用程序中,我有两个模型,比如Foo和FooBar。Foo是与FooBar相关的一对多FooBar具有存储Foo的Id的属性 在我的服务中,我保存了一些奇特的Where条件作为静态函数: public static System.Linq.Expressions.Expression<Func<Foo, bool>> FancyCondition(int input) { return(x => x.Prop1 == input); }

在我正在开发的MVC应用程序中,我有两个模型,比如Foo和FooBar。Foo是与FooBar相关的一对多FooBar具有存储Foo的Id的属性

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

public static System.Linq.Expressions.Expression<Func<Foo, bool>> FancyCondition(int input)
{
    return(x => x.Prop1 == input);
}
但是现在我需要把这个条件应用到FooBar类型的过滤对象上,我不知道怎么做。当然,我可以将调整所有字段和属性的条件从x.PropertyName复制到x.Foo.PropertyName,但这听起来不是个好主意


让我重新表述我的问题。我有过滤对象Foo的条件,我有FooBar类型的对象,它们总是只与一个Foo对象相关。我想使用相同的条件筛选FooBar类型的对象,但我不知道如何使用一段代码来实现这一点。

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

我和办公室里的其他人讨论过这个问题,他说,如果是SQL查询,你将如何解决它?。这会立即引导我找到一个解决方案,我可以使用Join来完成

因此,我在这里的错误是思考如何使用linq解决它,而不是如何使用SQL解决它,然后将其转换为linq


当然,对于如何实现这一目标,我愿意提出其他建议,尤其是那些比我更好的建议。

您需要添加更多信息。如果一个Foo有很多FooBar,那么Prop1与FooBar有什么关系?@Groo Foo可能有很多FooBar,但这并不重要,因为FooBar总是只有一个Foo。该条件涉及比较Foo的几个字符串属性及其相关对象的字符串属性,但不包括FooBars。它不应该是returnx=>x.Prop1==input;?双重相等sign@Abbas谢谢,你说得对
var results = dbContex.Foo.Where(FancyCondition(4));
IQueryable<FooBar> foobars = dbContex.FooBar.Join<FooBar, Foo, int?, FooBar>(dbContext.Foo.Where(FancyCondition(4)), x => x.FooId, y => y.Id, (x, y) => x);