web-dev-qa-db-ja.com

Linq結合の条件よりも大きい

2つのテーブルを条件付きで結合しようとしましたが、構文エラーが発生しています。ネットで解決策を見つけようとしましたが、条件付き条件付き結合を行う方法が見つかりません。他の唯一の選択肢は、最初に1つのテーブルから値を取得して、もう一度クエリを実行することです。

Linqで条件付き結合を行う他の方法があるかどうかを確認したいだけです。

これが私のコードです。私と同じかそれより低いすべてのポジションを見つけようとしています。基本的には仲間や部下を集めたいです。

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

LINQ結合ではこれを行うことはできません。LINQはequijoinsのみをサポートしています。ただし、これは可能です。

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

または、少し代替の同等のアプローチ:

var query = entity.M_Employee
                  .SelectMany(e => entity.M_Position
                                      .Where(p => e.PostionId >= p.PositionId));
43
Jon Skeet

以下:

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

(INNER JOIN Position P ON E..PostionId >= P.PositionId).を実行すると、まったく同じSQLが生成されます

4
jabko87
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);

承認ステータスや発効日など、履歴の詳細変更の表がある場合。最初のクエリは各顧客の現在の詳細を検索し、2番目のクエリはその後のすべての不正な詳細変更をテーブルに追加します。

少し時間がかかって、手に入れるのに役立つので、これが役立つことを願っています。

0
Andrew Day