现在有两个表,一个商品表,有id 和名称。一个商品标签表,有id和标签。
现在想要查商品名称和商品标签符合要求的。
自己写的linq是这样:
- C# code
var products= (from p in context.Product join pl in context.ProductLabel on p.ProductId equals pl.ProductId into go from g in go where p.ProductName.Contains(data)||g.Label.Contains(data) select g.Product).Distinct();
但是我用profiler查了下发现不是左连接而是inner join
那么linq的左连接应该怎么写呢?
附个创建表的sql
- SQL code
create table product (product_id varchar(10),product_name varchar(20)) insert into product values('001','纯银手镯') insert into product values('002','名族手镯') insert into product values('003','印巴风情手镯') insert into product values('004','泰国手镯') insert into product values('005','波西米亚手镯') insert into product values('006','彩绘手镯') create table product_lable (product_id varchar(10),product_lable varchar(20)) insert into product_lable values('001','年轻') insert into product_lable values('001','时尚') insert into product_lable values('003','个性') insert into product_lable values('004','时尚') insert into product_lable values('004','年轻') insert into product_lable values('004','活力') go drop table product drop table product_lable
------解决方案--------------------
首先要说的是,你的这种提问方式我很喜欢
问题描述中有附测试数据和表结构
GOOD! 赞一个!
Try:
- C# code
var products= (from p in context.Product join pl in context.Product_lable.Where(l=>l.Content.Contains(data)) on p.Product_id equals pl.Product_id into go from pl in go.DefaultIfEmpty() where p.Product_name.Contains(data) select new { p.Product_id, product_name =p.Product_name, lable=pl==null?"":pl.Content }).Distinct();
------解决方案--------------------
- C# code
var products= (from p in context.Product join pl in context.ProductLabel on p.ProductId equals pl.ProductId into go from g in go.DefaultIfEmpty() where p.ProductName.Contains(data)||g.Label.Contains(data) select g.Product).Distinct();
------解决方案--------------------
上面的大小寫有誤,另外Content其實是product_lable這個欄位。