Linq-sql连接两个表

时间:2012-06-27 00:47:02

标签: linq-to-sql join lambda

我正在尝试根据两个表(模型和制造商)中存在的两个值来连接数据库中的两个表,由于各种原因,数据库中没有这些值的fk关系。

到目前为止,我有以下内容:

var modelManufacturer = DataContext.Assets_ND.Select(a => new {a.ModelNo, a.Manufacturer}).Distinct();

var masterPMs = DataContext.MasterPlannedMaintenances.Where(pm => pm.PlantId == model.PlantId);

var joined = modelManufacturer.Join(masterPMs.AsEnumerable(), a => new {a.ModelNo, a.Manufacturer},pm => new {pm.Model, pm.Manufacturer}, x => new {x.ModelNo, x.Manufacturer, x.Id});

这不编译并且有错误

  

错误7方法的类型参数   “System.Linq.Queryable.Join(System.Linq.IQueryable,   System.Collections.Generic.IEnumerable,   System.Linq.Expressions.Expression>中   System.Linq.Expressions.Expression>中   System.Linq.Expressions.Expression&GT)”   无法从使用中推断出来。尝试指定类型参数   明确。

这是我对如何指定值有点难过的地方,我尝试了几个组合 modelManufacturer.Join<Asset, MasterPlannedMaintenance....>但是intellisense似乎暗示不对,或者至少我把它们放入的顺序并不正确。

我做错了什么或基于两个字符串字段连接这两个表的更好方法是什么?从左表(Model,Manufacturer)返回2个值,从右边(id)返回一个值。

1 个答案:

答案 0 :(得分:0)

var joined = (from a in dc.table1
              join b in dc.table2 on a.id equals b.id into temp
              from t in temp.DefaultIfEmpty()
              select new {
                  a.Model,
                  a.Manufacturer,
                  t.ID
               });

这将在两个表上执行左连接,并且只从table1中选择两个值,从表2中选择1。