2011-06-06 76 views
0

我有2个表。 表1和表2.他们有一对多的关系。我正在尝试执行下面的查询。它可以很好地找到结果。我的意思是,如果它不能像往常一样根据参数找到任何结果,我得到空值。然而它在表1类中始终带来所有表2的结果,而且我只想根据查询得到表2的结果。Linq To Entity - 筛选关系也

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

回答

0

UPDATE @ 6/8/2011年 你可以试试这个让你在表1

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


----------------------------------------------------------------- 

得到过滤Table2s由于要检查“任何”,您是刚开始表1实体,符合你的条件。 Table1s.Table2s为您提供所有相关条目。你需要在你需要为表1符合搜索条件获取Table2s再次过滤它

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

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; 
+0

谢谢你回答。但我确实需要1个结果,它是Table1类。然后,当我去Table1.Table2s我应该看到过滤的数据不是全部...... :( – EVR 2011-06-08 16:11:51

+0

你可以尝试新的查询我更新了答案? – Akhil 2011-06-08 18:24:18

+0

非常感谢你的答案。你写的是我最不喜欢它,因为我不想设置表1的所有属性。你是否理解我的痴迷?:) – EVR 2011-06-08 20:03:35