读书人

linq 左连接

发布时间: 2012-01-18 00:23:26 作者: rapoo

linq 左连接 求助
现在有两个表,一个商品表,有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','活力')godrop table productdrop 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位。
探讨

lambda表式大概是的。product_lable左外接product表
C# code
context.product_lable
.GroupJoin (
context.product,
pl => pl.Product_id,
p => p.Product_id,
(pl, p) =>
new ……

读书人网 >.NET

热点推荐