2012-06-27 3 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}); 

Это не компилирует и имеет ошибку

Error 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....> но IntelliSense, кажется, предполагает, что Isnt право, или, по крайней мере, для того, что я вставлять их не является правильным.

Что я делаю неправильно или что является лучшим способом присоединиться к этим двум таблицам на основе двух строковых полей и вернуть 2 значения из левой таблицы (Модель, Производитель) и один справа (id).

ответ

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 и 1 из таблицы 2.