【问题标题】:Linq & ASP.NET MVC: how to use "or" and "equals" in join statement [closed]Linq 和 ASP.NET MVC:如何在连接语句中使用“或”和“等于”[关闭]
【发布时间】:2014-08-24 13:36:48
【问题描述】:

请问如何在 linq 查询中翻译这个 sql 查询?

USE [BiblioDB]
 GO
 SELECT *
   FROM Exemplaire e
    LEFT JOIN location l
    ON e.ExemplaireId = l.ExemplaireId
    INNER JOIN Retour r
    ON l.LocationId is null or l.LocationId = r.LocationId
 Go

我尝试了这个 linq 查询,但第四行不起作用。

 BiblioDBContext biblioDBContext = new BiblioDBContext();
 var query = from e in biblioDBContext.Exemplaires
           join l in biblioDBContext.Locations on e.ExemplaireId equals l.LocationId
           join r in biblioDBContext.Retours on l.LocationId == null || l.LocationId equals r.LocationId r.LocationId
 select e;

【问题讨论】:

  • 错误:运算符 '||'不能应用于“bool”和“int”类型的操作数
  • 我们没有您的类型的类型信息或解决您的问题所需的所有信息;另外,当用户给您答案时,您会说“我有 15 个错误”,而无需使用您得到的精确错误来编辑您的问题。如果不向我们提供所需的所有信息,我不确定您希望我们如何为您提供帮助。

标签: c# sql asp.net-mvc linq


【解决方案1】:

试试这个:

 BiblioDBContext biblioDBContext = new BiblioDBContext();
 var query = from e in biblioDBContext.Exemplaires
     join l in biblioDBContext.Locations on e.ExemplaireId equals l.ExemplaireId into el
     from l in el.DefaultIfEmpty()
     from r in biblioDBContext.Retours
     where (l.LocationId == null) || (l.LocationId.Equals(r.LocationId))
 select new {e, l, r};

问题是缺少左连接所需的DefaultIfEmpty() 子句。

【讨论】:

  • @Sounouk 你遇到什么错误?如果您不向我们提供解决问题所需的反馈,您希望我们如何帮助您?
  • 我已经编辑了我的答案。它现在工作了吗?如果不是,请发布错误消息。
  • @GeorgeStocker,我尝试添加错误消息,但我不能,字符数超过授权。对不起!
  • @Zanon,谢谢!代码有效,但没有返回值,我注释了“where l.LocationId == null”行进行测试,系统返回了“Retours”表的值。以下是预期返回值的示例: Exemplaire = {e1, e2, e3} ;位置 = {e2, e3} ; Retour = {e2} ...系统应该返回:e1,e2
  • @Sounouk,我又编辑了。你的 OR 运算符不能放在 Linq Join 中,所以我不得不在 WHERE 子句中使用另一个 from (SelectMany) 和 OR 运算符。
猜你喜欢
  • 2021-10-06
  • 1970-01-01
  • 2020-06-11
  • 1970-01-01
  • 2015-09-25
  • 2012-07-29
  • 2018-04-15
  • 2013-02-15
  • 2021-08-07
相关资源
最近更新 更多