【问题标题】:Error in LINQ query executionLINQ 查询执行错误
【发布时间】:2014-07-09 22:34:51
【问题描述】:

我正在尝试从数据库中获取值,它与原始 sql 查询完美配合,但不适用于 linq。我正在分享我的代码,请指导我

LINQ:

using (var db = new SContext())
{
    var abc = db.Locales
                .Where(c => c.Culture == cultureName && c.Key == key)
                .Select(a => a.Value);

   return abc.ToString();
}

SQL RAW(完美运行)

using (var conn = new SqlConnection(_connectionString))
{
    using (var cmd = conn.CreateCommand())
    {
        cmd.CommandText = "SELECT [Value] FROM [Spenotics].[dbo].[Locale] WHERE [Key] = @key AND [Culture] = @culture";
        cmd.Parameters.AddWithValue("key", key);
        cmd.Parameters.AddWithValue("culture", cultureName);
        conn.Open();
        var value = cmd.ExecuteScalar();
        return (string)value;
     }
}

我想将 sql 查询转换为 linq,但它给出错误“对象引用未设置为对象的实例”

【问题讨论】:

  • 请使用stackoverflow.com/q/4660142/87698 确定究竟在哪里发生异常。
  • 在您的 linq 语句的末尾添加一个.First(),在 select 之后?这应该为您提供值而不是 IQueryable 值。
  • 你需要添加 .FirstOrDefault()
  • @SarahBourt 我已经使用了你的方法,但它给出了这个错误“序列不包含元素”
  • @Maarten 你的方法有效,谢谢:)

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


【解决方案1】:

当您只需要查询中的一个元素时,最好使用下面的元素之一

。 First() - 如果为空/未找到则抛​​出,如果重复则不抛出

。 FirstOrDefault() - 如果为空/未找到则返回默认值,如果重复则不抛出

。 Single() - 如果为空/未找到则抛​​出,如果存在重复则抛出

。 SingleOrDefault() - 如果为空/未找到则返回默认值,如果存在重复则抛出

var abc = db.Locales
                .Where(c => c.Culture == cultureName && c.Key == key)
                .Select(a => a.Value).FirstOrDefault();

在 SQL raw 中,最好使用 TOP 1

SELECT TOP 1 [Value] FROM [Spenotics].[dbo].[Locale] WHERE [Key] = @key AND [Culture] = @culture

【讨论】:

  • 很好的解释
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-16
  • 1970-01-01
  • 1970-01-01
  • 2011-11-09
  • 2017-12-17
相关资源
最近更新 更多