2012-06-27 117 views
0

我想加入我的数据库中的两个表基于关闭存在两个表(型号和制造商)的两个值,则在数据库中,这些值因各种原因没有FK的关系。的LINQ SQL连接两个表

到目前为止,我有以下几点:

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>)”无法根据使用情况推断出。尝试明确指定类型参数 。

这是我有点难倒就如何指定的值,我试过 modelManufacturer.Join<Asset, MasterPlannedMaintenance....>但智能感知的几个组合,似乎表明心不是正确的,或者至少是为了我把它们放进去是不正确的。

什么我做错了或什么是更好的方式来加入基于两个字符串字段这两个表,并从右侧(ID)返回左表(型号,制造商)和一个2倍的值。

回答

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 
       }); 

这会是一个左连接的两个表,并只选择从表FROM表1两个值和1 2