有关于linq的多表查询
public class P_type
{
public int p_type_id { get; set; }
public int parent_id { get; set; }
}
public class Products
{
public int pid { get; set; }
public int p_type_id { get; set; }
}
static void Main(string[] args)
{
List<P_type> list_P_type = new List<P_type>()
{
new P_type(){p_type_id=1,parent_id=0},
new P_type(){p_type_id=2,parent_id=1},
new P_type(){p_type_id=3,parent_id=1},
};
List<Products> list_Products = new List<Products>()
{
new Products(){p_type_id=2,pid=1},
new Products(){p_type_id=2,pid=2},
new Products(){p_type_id=3,pid=3},
new Products(){p_type_id=1,pid=4},
};
//如何查询list_Products中的pid 在list_P_type中parent_id为1的p_type_id
//我都不知道怎么描述了..直接来个SQL..
//select pid from list_Products where list_Products.p_type_id in
//(select p_type_id from list_P_type where parent_id=1)
var one = from a in list_P_type where a.p_type_id in (from b in list_P_type where b.parent_id==1 select b.p_type_id) select a.pid;
//不能这样写啊- -0
}
另求Lambda表达式语法大全...网上找的都很散..有些还不正确..有没有兄弟有好的介绍
------最佳解决方案--------------------
var one = from a in list_Products?
let t= list_P_type.Where(x=>x.parent_id == 1).Select(x=>x.p_type_id)
where t.Contains(a.p_type_id)
select a;
//lamda写法:
var one = list_Products.Where(a=>list_P_type.Where(x=>x.parent_id == 1).Select(x=>x.p_type_id).Contains(a.p_type_id));
楼主这样的提问方式 值得后边的人学习
有类的定义代码和测试数据,非常好
[其他解释]
其实这东西,使用join方式更容易搞定,也更容易理解
var two = list_P_type.Where(x => x.parent_id == 1).Join(list_Products, p => p.p_type_id, p => p.p_type_id, (p_type, p_product) => p_product);
ps:学习linq语法要从两个方面入手
1.集合论linq的基本实现就是传统集合论,所以只要是集合论可以解释,他都有对应方法
2.传统关系数据库,一般来说只要标准关系数据库支持的规范sql,在linq里也同样有对应支持
比如你这个东西,在sql里我们实际也是这两种方式,一种in 查询方式,一种join查询方式,所以这里我们也可以一样翻译成两种lamda,楼上是in的方式,我这里给的是join方式
[其他解释]
//Lambda表达式
List<Products> result = list_Products.Where(c => list_P_type.Where(a => a.parent_id == 1).Select(a => a.p_type_id).Contains(c.pid)).ToList();
//LINQ表达式
List<Products> result1 = (from u in list_Products
let n = list_P_type.Where(a => a.parent_id == 1).Select(b => b.p_type_id)
where n.Contains(u.p_type_id)
select u).ToList();
[其他解释]
可以参考msdn上的一个例子:http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b
[其他解释]
该回复于2012-12-07 17:04:12被管理员删除
[其他解释]
上面join写法的linq方式
var two_linq = from ptype in list_P_type
from pProduct in list_Products
where ptype.p_type_id == pProduct.p_type_id && ptype.parent_id == 1
select pProduct;
[其他解释]
同意放歌的说法,楼主的需求用inner join来实现最好:
var query = from ptype in list_P_type
join pProduct in list_Products
on ptype.p_type_id equals pProduct.p_type_id
where ptype.parent_id == 1
select pProduct;
[其他解释]
十分感谢楼上各位的回答..星期6星期天睡了2天都没上来看..