C# Linq到实体过滤关系数据问题

C# Linq到实体过滤关系数据问题,c#,linq,entity-framework,linq-to-entities,entity-framework-4.1,C#,Linq,Entity Framework,Linq To Entities,Entity Framework 4.1,我有两张桌子。 表1和表2。他们有一对多的关系。我正在尝试做一个如下的查询。它可以很好地找到结果。我的意思是,如果它不能根据参数找到任何结果,我会像往常一样得到空值。然而,它始终在表1类中提供表2的所有结果,我确实希望根据查询只获得表2的结果 dc.Table1s.SingleOrDefault(t1 => t1.SearchField1 == param1 && t1.Table2s.Any(t2 => t2.

我有两张桌子。 表1和表2。他们有一对多的关系。我正在尝试做一个如下的查询。它可以很好地找到结果。我的意思是,如果它不能根据参数找到任何结果,我会像往常一样得到空值。然而,它始终在表1类中提供表2的所有结果,我确实希望根据查询只获得表2的结果

dc.Table1s.SingleOrDefault(t1 => t1.SearchField1 == param1 
                           && t1.Table2s.Any(t2 => t2.SearchField2 == param2 
                                          && t2.SearchField3 == param3));

我确实希望结果为Table1类,并使用Table1.Table2s进行过滤。有可能吗?

您需要定义如何使用这两个表之间的关系

例如,如果表2引用了表1,而表1包含了表2的集合:

var result = (from t1 in Table1s
             from t2 in t1.Table2s // this leverages the relationship
             where t1.sf1 == p1 
                   && t2.sf2 = p2
                   && t2.sf3 == p3
             select t1).FirstOrDefault();

以上内容将使用您的关系将两者结合起来,并为您提供符合标准的所有t1。

谢谢您的回答。但它仍然不会在结果处过滤t1.Table2s。我忘了说我在用懒洋洋。可能是原因吗?可能-在调用linq查询之前,请检查t1.Table2s是否有任何结果。我对查询没有问题。如果3个标准不匹配,我根本没有结果。所以我很确定这个查询是有效的。唯一的原因是,当我从查询中获取Table1并检查Table1.Table2s时,我看到了两条记录,而不是一条。在LinqToSQL中,我没有这样的问题。但我想原因是懒惰。它在返回结果时覆盖查询。。。