2012-06-14 181 views
0

我有三个tables.I必须使用linq语句检索数据。 我的三个表名是A,B,C。 我连参加基于标识的连接两个表AB像linq中的嵌套查询

select ol, fN, LN, ci, co 
from member 
join details 
on member_id = details_id 
where details_id in 
(select contacts_id from contacts where 
contacts_id1 = 1 and contacts_usr_id = 1) 

我能够编写查询高达where条件,u能帮助我如何写查询内,而条件..

对我来说这很紧急,如果你知道soln,请不要忽略它。

+0

可以用真实姓名发布表结构吗? –

+2

你尝试过什么吗?顺便说一下,第二部分'where usr_id in(从table3中选择contacts_id,其中usr_id = 1和contacts_id = 1)'是...很奇怪。 –

+0

Thanx答复,在那部分只有我也面临问题 – steve

回答

1

你可以试试这个:

 var idlist = (from tbl in table3 
        where tbl.usr_id == 1 && tbl.contacts_id == 1 
        select tbl.contacts_id).ToList(); 

    var x = from A in table1 
       from B in table2 where A.user_id == B.user_id     
       && idlist.Contains(A.user_id) 
       select new { a = A.a, b = A.b, c = A.c, d = B.d, e = B.e }; 

检查,让我知道,如果这项工作。

+0

Thanx的答复,它显示错误在哪里idlist.contains(新{contacts_id = A.user_id}),它显示“不包含定义为'Contains'和最好的扩展方法加载System.Linq.IEnumerable“ – steve

+0

也许你缺少一些库引用,如System.Data.Linq或System.Linq。 –

+0

我已经包含那些库函数 – steve

0

尝试翻转查询颠倒。如何处理以下内容:

var query = 
    from t3 in table3 
    where t3.user_id = 1 && t3.contacts_id = 1 
    join t2 in table2 on t3.contacts_id equals t2.usr_id 
    join t1 in table1 on t2.usr_id equals t1.userid 
    select new {t2.a, t2.b, t2.c, t1.d, t1.e}; 
+0

感谢您的回复,它工作正常,我们可以使用Lambda表达 – steve

+0

@nanicharan - 为什么您需要使用Lambda表达式?无论如何,LINQ只是语法糖。 – Enigmativity

+0

你可以用lambda表达式来做到这一点。我发现使用查询理解的连接语法更易于读取/维护,但每种语法都是自己的。如果您不能自己做,您可以使用LINQPad将工作查询转换为Lambda语法。 –