Во-первых, это для устаревшего приложения, поэтому я не могу радикально изменить какую-либо логику.Linq Queryable - объединение двух таблиц без связей
У меня есть база данных с двумя таблицами, у которых нет никаких отношений. Я спросил, могу ли я изменить это, но мне сказали, что не могу.
Эти таблицы могут быть описаны как
Create Table T1
[doc_id] [int] NOT NULL, -- Primary Key
[customer_acc_no] [varchar](16) NULL,
[gcompany] [varchar](30) NULL,
....
extra fields
и стол
Create Table T2
[UserURN] [int] NOT NULL, -- All three fields make up
[AccountNumber] [varchar](20) NOT NULL, -- the primary key
[Company] [varchar](50) NOT NULL,
....
extra fields
Как вы можете видеть, не только имена полей различны, но они имеют разные длины тоже.
Я использую шаблоны репозитория и UnitOfWork. До сих пор мне удалось скопировать следующее:
private IRepository<T1> _t1Repository;
private IRepository<T2> _t2Repository;
Они заполнены внутри конструктора.
Далее я использую следующий код, чтобы настроить получение запрашиваемого репозитория.
var retVal = _t1Repository.Queryable();
Из этого, я пытаюсь добавить следующее соединение.
from q in T1
join w in T2
on new { X1 = q.gcompany, X2 = q.Customer_acc_no }
equals new { X1 = w.Company, X2 = w.AccountNumber }
Я имею в виду, это было бы по линии:
var query = T1.GroupJoin(T2,
c => c.gcompany,
o => o.Company,
(c, result) => new Result(c.doc_id, result))
.GroupJoin(T2,
c => c.Customer_acc_no,
o => o.AccountNumber ,
(c, result) => new Result(c.doc_id, result));
, но я не уверен, как все попытки до сих пор заканчиваются ошибки в Visual Studio.
Просто, чтобы передать идею, если все 3 поля составляют 1 ключ, вы можете создать новый класс, содержащий эти поля и создать собственный компаратор для указанного класса. – RandomStranger
Не могли бы вы объяснить, что я новичок во всех вещах Linq – gilesrpa
Я буду ссылаться на [это] (http://stackoverflow.com/questions/634826/using-an-object-as-a-generic-dictionary-key) вопрос ответ. В нем говорится об использовании класса в качестве ключа для словаря, но я уверен, что он применим для вашего дела. – RandomStranger