Premièrement, ceci est pour une application héritée, donc je ne peux pas changer radicalement la logique.Linq Queryable - Rejoindre deux tables sans relation
J'ai une base de données avec deux tables qui n'ont aucune relation. J'ai demandé si je change cela, mais on m'a dit que je ne peux pas.
Ces tableaux peuvent être décrits comme
Create Table T1
[doc_id] [int] NOT NULL, -- Primary Key
[customer_acc_no] [varchar](16) NULL,
[gcompany] [varchar](30) NULL,
....
extra fields
et une table
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
Comme vous pouvez le voir, non seulement sont les noms des champs différents, mais ils ont des longueurs différentes aussi. J'utilise les modèles Repository et UnitOfWork. Jusqu'à présent, j'ai réussi à coder ce qui suit:
private IRepository<T1> _t1Repository;
private IRepository<T2> _t2Repository;
Ceux-ci sont remplis dans le constructeur.
Ensuite, j'utilise le code suivant pour configurer obtenir un référentiel interrogeable.
var retVal = _t1Repository.Queryable();
De cela, j'essaye d'ajouter la jointure suivante.
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 }
Je pense que ce serait le long des lignes de:
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));
mais je ne suis pas sûr que toutes les tentatives aboutissent à ce jour des erreurs dans Visual Studio.
Juste au pas une idée, si les 3 champs constituent une clé, vous pouvez créer une nouvelle classe contenant ces champs et créer un comparateur personnalisé pour ladite classe. – RandomStranger
Pouvez-vous s'il vous plaît expliquer comme je suis nouveau à toutes les choses Linq – gilesrpa
Je ferai référence à [this] (http://stackoverflow.com/questions/634826/using-an-object-as-a-generic-dictionary-key) Question Réponse. Il parle d'utiliser une classe comme une clé pour un dictionnaire, mais je suis à peu près sûr que cela s'applique à votre cas. – RandomStranger