重複の可能性:
LINQ の SQL ISNULL と同等ですか?
私はこのような3つのテーブルを持っています:
コメント表:
commentId pid sid text vid
1 1 null comment 1 1
2 null 1 comment 2 1
3 2 null comment 3 1
学生テーブル
sid firstname lastname
1 john adam
2 joan adam
教授テーブル :
pid firstname lastname
1 mark abram
2 sean hoak
結果が次のように返されるようにクエリを作成したい:
firstname lastname
mark abram
john adam
sean hoak
メートル
if (select query ==null) then (selec query 1) else select (query 2)
私は次のことを試しました:
if((select pid from comment==null)
then select student.firstname , student.lastname from student where sid in (select sid from comment where vid=1)
else
(select professor.firstname ,professor.lastname from professor where pid in (select pid from comment where vid=1)
しかし無駄に
その後、他の人がこのソリューションクエリを提供しました
IsNull クエリ
SELECT ISNULL(P.firstname, s.firstname) AS Expr1,ISNULL(P.lastname, s.lastname) AS Expr2
FROM comment AS C
LEFT OUTER JOIN professor AS P ON P.ID = C.PID
LEFT OUTER JOIN student AS s ON s.ID = C.SID
WHERE (C.VID = 2)
合体:
SELECT COALESCE(p.firstname, s.firstname), COALESCE(p.lastname, s.lastname)
FROM comment c
LEFT JOIN Professor p
ON c.pid = p.id
LEFT JOIN Student s
ON c.sid = s.id
WHERE c.vid = 2
どちらも SQL Management で正常に動作しますが、Linq では次のように動作します。
ObjectQuery<string> results1 = context.CreateQuery<string>(query1, parameters)
私はそれを自分自身に変換しようとしました:
var qry = from c in ctx.comment
join p in ctx.professor
on c.PID equals p.ID into tree
join s in ctx.student
on c.SID equals s.ID into tree1
where c.VID == vID
from tmp in tree.DefaultIfEmpty()
from tmp1 in tree.DefaultIfEmpty()
select new
{
Firstnmae = tmp.firstname ?? tmp1.firstname,
LastName = tmp.lastname ?? tmp1.lastname
};
しかし、それはnullを返します
アイデアはありますか?