在 Linq 中使用 IsNull 或选择 COALESCE ..?

Using IsNull or select COALESCE in Linq..?(在 Linq 中使用 IsNull 或选择 COALESCE ..?)
本文介绍了在 Linq 中使用 IsNull 或选择 COALESCE ..?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

可能的重复:
LINQ中SQL ISNULL的等价物?

我有 3 张这样的桌子:

I have 3 tables like this :

评论表:

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

我想进行查询,以便结果像这样返回:

I want to make a query so the result to return like this :

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)

但没有用

然后其他人提供了这个解决方案查询

then others provided this solution queries

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 中使用:

both works fine in SQL Management , but in Linq with the:

ObjectQuery<string> results1 = context.CreateQuery<string>(query1, parameters) 

我已经尝试将它自己转换为:

I've tried to convert it my self to :

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
  };

但它返回空

有什么想法吗?

推荐答案

看来你在 tmp1 附近有错字,你应该做 tree1.DefaultIfEmpty() >

It seems you have a typo near tmp1, you should do tree1.DefaultIfEmpty()

      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 tree1.DefaultIfEmpty()
      select new
      {
          Firstnmae = tmp.firstname ?? tmp1.firstname,
          LastName = tmp.lastname ?? tmp1.lastname
      };

这篇关于在 Linq 中使用 IsNull 或选择 COALESCE ..?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)