【问题标题】:c# linq the code that gets value from the table doesn't workc# linq 从表中获取值的代码不起作用
【发布时间】:2017-03-09 11:56:37
【问题描述】:

我刚刚从JAVA 移动到C#(只是为了获得一些经验),我正在尝试从数据库中获取一些数据。

数据库包含一个名为USERS 的表和列USER(string) 和POINTS(int)

现在我正在尝试使用LINQ 数据上下文并使用其中一种方法来选择表,但由于某种原因它不起作用...

private int getUserPoints(string nickname)
{
    int points = 0;
    try {
        var p = from r in db.USERs
                  where r.USER1 == nickname
                  select r.POINTS;

        points = p.First();
    } catch  (Exception e){
        Console.WriteLine(e.Message);
    }
    return points;
}

p.First(); 引发的错误

System.InvalidOperationException:序列不包含任何元素

您能帮我解决这个问题吗?我还在学习 c#,我知道我进步了一点,但是我正在尝试做一些需要数据库通信的有趣的事情。

谢谢!

这个异常处理正确吗?我很高兴有关这种方式的提示。

更新:
我相信我确实配置了它,我创建了一个 LINQ to SQL CLASS 并将表拖到其中。

然后我像这样初始化上下文:

linkToSqlClassDataContext db = new linkToSqlClassDataContext(
                           Properties.Settings.Default.pointsGambleConnectionString);

【问题讨论】:

  • 它到底是怎么不起作用的?你有什么例外?
  • 您是否为 linq 类配置了数据库??
  • 在您的答案中发布异常文本。最好发布 full 异常,包括调用堆栈和内部异常。这就像记录 Exception.ToString() 的结果一样简单
  • 您是否尝试过调试代码?如果抛出异常,调试器将停止。另外,数据库是否包含数据?
  • @user2852371 使用FirstOrDefault() 而不是First()

标签: c# linq


【解决方案1】:

如果你得到这个:System.InvalidOperationException 异常,这意味着你不能在空集合上调用First()

您可以通过使用FirstOrDefault 来解决这个问题,这可能会导致您将0int 的默认值)分配给points

我想你需要弄清楚为什么你找不到任何符合where r.USER1 == nickname条件的条目。

作为旁注,建议使用using 块,以便在获得所需值后正确关闭连接:

private int getUserPoints(string nickname)
{
    using (linkToSqlClassDataContext db = new linkToSqlClassDataContext(Properties.Settings.Default.pointsGambleConnectionString))
    {
        var p = from r in db.USERs
                where r.USER1 == nickname
                select r.POINTS;

        return p.FirstOrDefault();
    }
}

调用此方法时可以使用 try/catch 块:

int points = 0;
try 
{
    points = getUserPoints("yourname");
} 
catch  (Exception e)
{
    Console.WriteLine(e.Message);
}

【讨论】:

  • 谢谢,帮了很多忙,还发现了愚蠢的问题,昵称没有收到正确的字符串(我只是在使用更多不同的库,我确信它正在接收我不过)并感谢您的提示!
  • @user2852371 欢迎您。如果你得到一个空集合,通常过滤是问题;)(至少在我的经验中)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-12
  • 1970-01-01
  • 2016-11-01
相关资源
最近更新 更多