SELECT A.X, B.Y
FROM A JOIN B ON A.X = B.Y
このLINQのメソッド呼び出しが(参加する)上記の参加が生成されます。
var query = A.Join
(
B,
a => a.x,
b => b.y,
(a, b) => new {a.x, b.y} //if you want more columns - add them here.
);
SELECT A.X, B.Y
FROM A LEFT JOIN B ON A.X = B.Y
(GroupJoin、SelectMany、DefaultIfEmptyに)これらのLINQメソッド呼び出しは、左の上に生成されますここで重要な概念は、LINQのの方法は、階層的形状の結果を生み出すことである
var query = A.GroupJoin
(
B,
a => a.x,
b => b.y,
(a, g) => new {a, g}
).SelectMany
(
z => z.g.DefaultIfEmpty(),
(z, b) =>
new { x = z.a.x, y = b.y } //if you want more columns - add them here.
);
に参加フラットな行 - 列の形状ではありません。
- のLINQの
GroupBy
は(空ではないかもしれない)の要素のコレクションに整合グループ化キーを用いて階層に成形結果を生成します。 SQLのGroupBy
句では、集計値を持つのグループ化キーが生成されます。作業するサブコレクションはありません。
- 同様に、Linqの
GroupJoin
は、子レコードのコレクションに一致する親レコード(空の場合もある)を生成します。 SqlのLEFT JOIN
は、各子レコードに一致する親レコードを生成します。それ以外の一致がない場合は、NULL子レコードを生成します。 Linqの形状からSqlの形にするには、子レコードのコレクションをSelectMany
でアンパックし、子レコードの空のコレクションをDefaultIfEmpty
で処理する必要があります。
そして、ここでは、問題のSQL linquifyingでの私の試みです:あなたは(NOLOCK)ヒントを保持したい場合は
var query =
from a in Appointment
where a.RowStatus == 1
where a.Type == 1
from b in a.AppointmentFormula.Where(af => af.RowStatus == 1).DefaultIfEmpty()
from d in a.TypeRecord //a has a type column and is related to a table named type, disambiguate the names
from e in a.AppointmentForm.DefaultIfEmpty()
order by a.Type
select new { a.AppointmentId, a.Status, a.Type, a.Title, b.Days, d.Description, e.Form }
Linq to SQLを使用していますか? –