【问题标题】:Linq-sql join two tableslinq-sql 连接两个表
【发布时间】:2013-02-13 01:40:59
【问题描述】:

我正在尝试根据两个表中存在的两个值(型号和制造商)连接我的数据库中的两个表,由于各种原因,这些值在数据库中没有 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>)' 不能从用法中推断出来。尝试指定类型参数 明确的。

这是我对如何指定值有点难过的地方,我尝试了几种组合 modelManufacturer.Join<Asset, MasterPlannedMaintenance....> 但智能感知似乎表明这是不对的,或者至少我放置它们的顺序不正确。

我做错了什么或者基于两个字符串字段连接这两个表并从左表(型号、制造商)和右表(id)返回 2 个值的更好方法。

【问题讨论】:

    标签: linq-to-sql join lambda


    【解决方案1】:
    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
                   });
    

    这将对两个表进行左连接,仅从表 1 中选择两个值,从表 2 中选择 1。

    【讨论】:

      猜你喜欢
      • 2011-07-20
      • 1970-01-01
      • 2014-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-12
      • 1970-01-01
      相关资源
      最近更新 更多