C# Linq到实体-也过滤关系
我有两张桌子。 表1和表2。他们有一对多的关系。我正在尝试做一个如下的查询。它可以很好地找到结果。我的意思是,如果它不能根据参数找到任何结果,我会像往常一样得到空值。然而,它始终在表1类中提供表2的所有结果,我确实希望根据查询只获得表2的结果C# Linq到实体-也过滤关系,c#,linq,entity-framework,linq-to-entities,C#,Linq,Entity Framework,Linq To Entities,我有两张桌子。 表1和表2。他们有一对多的关系。我正在尝试做一个如下的查询。它可以很好地找到结果。我的意思是,如果它不能根据参数找到任何结果,我会像往常一样得到空值。然而,它始终在表1类中提供表2的所有结果,我确实希望根据查询只获得表2的结果 dc.Table1s.SingleOrDefault(t1 => t1.SearchField1 == param1 && t1.Table2s.Any(t2 => t2.
dc.Table1s.SingleOrDefault(t1 => t1.SearchField1 == param1
&& t1.Table2s.Any(t2 => t2.SearchField2 == param2
&& t2.SearchField3 == param3));
更新日期:2011年6月8日
你能试试这个吗?这样你就可以在表1中得到经过过滤的表2了
var result = from t1 in Table1s
where t1.key == t2.key && t1.SearchField1 == param1
select new Table1s //creating new Table1s Object with Filtered Table2s values
{
key = t1.key,
SearchField1 = t1.SearchField1
//set all other Table1s propeties from t1
...
Table2s = t1.Table2s.Where( x=> x.SearchField2 == param2 && x.SearchField3 == param3)
};
-----------------------------------------------------------------
因为您正在检查是否存在任何问题,所以您只需要得到与您的条件匹配的Table1实体。Table1s.Table2s提供所有相关条目。你需要再次过滤它
dc.Table1s.SingleOrDefault(t1 => t1.SearchField1 == param1
&& t1.Table2s.Any(t2 => t2.SearchField2 == param2
&& t2.SearchField3 == param3));
当您需要为表1获取与搜索条件匹配的表2时
var table2s = table1.Table2s.Where(t2 => t2.SearchField2 == param2 && t2.SearchField3 == param3);
如果您直接需要Table2,可以执行以下操作:
var result = from t1 in Table1s
from t2 in Table2s
where t1.key == t2.key && t1.SearchField1 == param1
&& t2.SearchField2 == param2
&& t2.SearchField3 == param3
select t2;
谢谢你的回答。但我想要一个结果,它是Table1类。然后,当我转到表1.2时,我会看到过滤后的数据,而不是所有数据…:再次感谢你的回答。你写的是我最糟糕的情况。我不喜欢它,因为我不想设置表1的所有属性。你明白我的困扰吗我想我的主要问题是懒散: