2010-09-16 17 views
24

J'avais essayé de joindre deux tables conditionnellement mais il me donne l'erreur de syntaxe. J'ai essayé de trouver une solution dans le réseau, mais je ne peux pas trouver comment faire une jointure conditionnelle avec condition. La seule autre alternative est d'obtenir la valeur d'abord d'une table et de refaire une requête.Supérieur à la condition dans Linq Join

Je veux juste confirmer s'il existe une autre façon de faire une jointure conditionnelle avec linq.

Voici mon code, j'essaie de trouver toutes les positions qui sont égales ou inférieures à moi. Fondamentalement, je veux obtenir mes pairs et subordonnés.

from e in entity.M_Employee 
join p in entity.M_Position on e.PostionId >= p.PositionId 
select p; 

Répondre

36

Vous ne pouvez pas le faire avec un LINQ joint - LINQ ne supporte que équijointures. Cependant, vous pouvez le faire:

var query = from e in entity.M_Employee 
      from p in entity.M_Position 
      where e.PostionId >= p.PositionId 
      select p; 

Ou un peu d'autre choix que l'approche équivalente:

var query = entity.M_Employee 
        .SelectMany(e => entity.M_Position 
             .Where(p => e.PostionId >= p.PositionId)); 
+0

oh. Donc, la jointure croisée peut fonctionner ... Merci – Nap

2

Après:

from e in entity.M_Employee 
from p in entity.M_Position.Where(p => e.PostionId >= p.PositionId) 
select p; 

produira exactement le même SQL que vous êtes après (INNER JOIN Position P ON E..PostionId >= P.PositionId).

0
var currentDetails = from c in customers 
        group c by new { c.Name, c.Authed } into g 
        where g.Key.Authed == "True" 
        select g.OrderByDescending(t => t.EffectiveDate).First(); 

var currentAndUnauthorised = (from c in customers 
          join cd in currentDetails 
          on c.Name equals cd.Name 
          where c.EffectiveDate >= cd.EffectiveDate 
          select c).OrderBy(o => o.CoverId).ThenBy(o => o.EffectiveDate); 

Si vous avez un tableau des changements de détails historiques, y compris le statut d'autorisation et la date d'entrée en vigueur. La première requête trouve les détails actuels de chaque client et la deuxième requête ajoute toutes les modifications de détail non autorisées subséquentes dans la table.

J'espère que cela est utile car il m'a fallu du temps et de l'aide pour obtenir aussi.