2つのテーブルを条件付きで結合しようとしましたが、構文エラーが発生しています。ネットで解決策を見つけようとしましたが、条件付き条件付き結合を行う方法が見つかりません。他の唯一の選択肢は、最初に1つのテーブルから値を取得して、もう一度クエリを実行することです。
Linqで条件付き結合を行う他の方法があるかどうかを確認したいだけです。
これが私のコードです。私と同じかそれより低いすべてのポジションを見つけようとしています。基本的には仲間や部下を集めたいです。
from e in entity.M_Employee
join p in entity.M_Position on e.PostionId >= p.PositionId
select p;
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));
以下:
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が生成されます
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番目のクエリはその後のすべての不正な詳細変更をテーブルに追加します。
少し時間がかかって、手に入れるのに役立つので、これが役立つことを願っています。