【问题标题】:LINQ to SQL ,Join tables to get distinct result?LINQ to SQL,加入表以获得不同的结果?
【发布时间】:2016-11-30 13:09:02
【问题描述】:

我正在尝试编写一个 LINQ 查询,它可以从两个 SQL Server 数据表中获取一些不同的值。

我有两个名为Facility_Cost_TBL 和Tenant_Bills_TBL 的表。 然后我有一个名为 Nursing_Home_Name 的列,我试图从中获取不同的数据。

这是我在 LINQ 中的努力,但它不起作用,

var name = (from f in dataContext.Facility_Cost_TBLs
                join t in dataContext.Tenant_Bills_TBLs on f.Tenant_Code equals t.Tenant_Code
                where f.Tenant_Code == code && f.Date_Month == date.Month && f.Date_Year == date.Year
                select new {Facility_Cost_TBL = f, Tenant_Bills_TBL = t}).Distinct();

这是我通过 T-SQL 完成的工作 SQL 语句。

SELECT DISTINCT Nursing_Home_Name 
         FROM (SELECT Nursing_Home_Name 
         FROM Facility_Cost_TBL 
         WHERE Date_Year = 2016 AND Date_Month = 10 AND Tenant_Code = 664250 
         UNION SELECT Nursing_Home_Name 
         FROM Tenant_Bills_TBL 
         WHERE Year_Data = 2016 AND Month_Data = 10 AND Tenant_Code = 664250) 
         a

有人能告诉我什么 LINQ 语法和什么 LINQ 扩展方法查询是什么样的吗?

【问题讨论】:

  • 在您的LINQ 加入中,您不应该也加入Year 和Month 吗?
  • @WEI_DBA,我不知道该怎么做,这就是为什么这不起作用。
  • 您的 Linq 语句的问题在于它正在执行内部联接,因此只有在两个表都有条目时才返回结果。
  • @sgmoore,感谢您的帮助,我不太清楚自己做错了什么。对 LINQ 来说还是个新手。

标签: c# sql sql-server linq


【解决方案1】:

请尝试关注

var names = ((from f in dataContext.Facility_Cost_TBLs 
                                          where f.Tenant_Code == "664250" && f.Date_Month == "10" && f.Date_Year == "2016"
                                          select new { Nursing_Home_Name = f.Nursing_Home_Name }).
                                          Union(
                                          from t in dataContext.Tenant_Bills_TBLs
                                          where t.Tenant_Code == "664250" && t.Date_Month == "10" && t.Date_Year == "2016"
                                          select new { Nursing_Home_Name = t.Nursing_Home_Name })).ToList();

希望对你有帮助

【讨论】:

  • 对此的有趣方法。如果可能的话,我正在寻找一个查询。
  • 如果你在前两个查询中删除.ToList(),那么你最终会得到一个sql查询。
  • 不需要包含.ToDistinct(),因为.Union 会自动排除重复项。
  • 谢谢@sgmoore 和 KyloRen 请检查已修改的解决方案 :)
  • 谢谢,现在我明白我做错了什么。我不认为将 Union 用于 LINQ 查询。紫外线标记答案解决了。再次感谢。
【解决方案2】:

试试这个看看这是否有效。 LINQ to SQL: Multiple joins ON multiple Columns. Is this possible?

var name = (from f in dataContext.Facility_Cost_TBLs
                join t in dataContext.Tenant_Bills_TBLs  equals on new { f.Tenant_Code, f.Date_Month, f.Date_Year } equals new { t.Tenant_Code, t.Date_Month, t.Date_Year } 
                where f.Tenant_Code == code && f.Date_Month == date.Month && f.Date_Year == date.Year
                select new {Facility_Cost_TBL = f, Tenant_Bills_TBL = t}).Distinct();

【讨论】:

  • 感谢您的努力,我发现@J-Mean 的方法更适合我的需要。为帮助投票。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-15
  • 2020-03-11
  • 2020-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多