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));

Linq-To实体-过滤关系

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;