Linq-To实体-过滤关系
本文关键字:关系 过滤 实体 Linq-To | 更新日期: 2023-09-27 17:58:36
我有两个表。表1和表2。他们有一对多的关系。我正在尝试进行如下查询。它可以很好地找到结果。我的意思是,如果它不能根据参数找到任何结果,我会像往常一样得到null值。然而,它总是在表1类中带来表2的所有结果,我确实希望根据查询只得到表2的结果。
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实体。表1。表2给出了所有相关条目。你需要再次过滤
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);
如果你直接需要Table2s,你可以做:
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;