【问题标题】:Take the first record in a LINQ left join获取 LINQ 左连接中的第一条记录
【发布时间】:2017-12-13 23:09:25
【问题描述】:

如何获取以下代码中的第一条记录?

subscription_end = (from ss in School_subs
                                .Where (s => s.School_id == sc.School_id) 
                                select ss.End_date) 

这是在 LinqPad 中工作的整个查询:

var query = ((from sc in Schools.Where(s => s.Active == 1)
                select new 
                        {
                        sc, 
                        teletardy_active = (from tt in Teletardies
                            .Where(t => t.School_id == sc.School_id) 
                            select tt.Active),
                        district_name = (from dd in Districts
                            .Where (d => d.District_id == sc.District_id) 
                            select dd.District_name),
                        subscription_end = (from ss in School_subs
                            .Where (s => s.School_id == sc.School_id) 
                            select ss.End_date)
                        }
                    ).OrderBy(o => o.sc.School_name));

query.Dump();

【问题讨论】:

  • 嗯 .. .First() ?
  • 更具体地说,query.First().Dump();

标签: c# linq


【解决方案1】:

您可以使用 First()、FirstOrDefault() 或 Take(1)。如果您不确定是否至少有一个元素,请使用 FirstOrDefault(),否则您可以使用 First() 或 Take(1)。但是 take(1) 将返回另一个包含单个元素的 Enumerable,而不是单个元素本身。

subscription_end = (from ss in School_subs.Where (s => s.School_id == sc.School_id) select ss.End_date).FirstOrDefault();
if (subscription_end != null)
{
    // code to work with first elememnt
}

// Using first
subscription_end = (from ss in School_subs.Where (s => s.School_id == sc.School_id) select ss.End_date).First();

// Using take
(from ss in School_subs.Where (s => s.School_id == sc.School_id) select ss.End_date).Take(1);

【讨论】:

  • 谢谢,我今天早些时候尝试了每一个,并得到如下所示的错误。我可能不得不尝试不同的方法。 MySqlException:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的“OUTER APPLY (SELECT t2.end_date, t2.school_id FROM school_subs AS t2 W”附近使用正确的语法
  • 仅供参考 - 无论使用 First()、Take(1) 等,我都会遇到同样的错误。我开始认为这是一个 MySql 问题。我可以用 SQL 做到这一点——没问题。但是想弄清楚如何使用 LINQ 来做到这一点 - 如果可能的话。
  • 感谢您的信息。我还没有将 mysql DBMS 与 LINQ 一起使用。如果我们考虑这些 stackoverflow 问题,似乎 LINQ to SQL 不支持 mysql。它只支持 MSSQL。因此,他们建议使用额外的 mysql 包装器、LINQ to SQL 支持,如 DB LINQ。 - 有关 mysql linq to sql 支持的有用链接 - stackoverflow.com/questions/2893607/…github.com/DbLinq/dblinq2007 和 stckoverflow 链接 - stackoverflow.com/questions/12388347/…
  • BUDDHIKA - 我认为你是对的。我一直在使用 LINQ 对 MySQL 进行相对简单的查询,并取得了巨大的成功,但是当它们变得更复杂时,它们总是一个问题。我会做更多的挖掘,但我想我可能会浪费我的时间。
【解决方案2】:

MySQL 不支持在 MVC 环境中由 LINQ 生成的复杂左连接和子查询。 LINQ 可用于更简单的查询,但 SQL 应用于更复杂的查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 2021-02-25
    • 2019-12-28
    • 2013-12-20
    相关资源
    最近更新 更多