首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

linq 左连接

2012-01-18 
linq 左连接 求助现在有两个表,一个商品表,有id 和名称。一个商品标签表,有id和标签。现在想要查商品名称和

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 ……

热点排行