使用LINQ TO SQL选择单行

时间:2011-02-04 10:28:31

标签: c# linq-to-sql

我开始处理LINQ To SQL,我尝试解决这个原始问题。 我有一个非常简单的表,有两列。

  • 尼克 - 钥匙,独特
  • 密码

我想删除带有一些昵称的行。

我使用这种方法:

    public void DeleteSpiritUser(string nick)
    {
        var user = from u in _dc.Spirit_Users where u.Nick == nick select u;

        using (var scope = new TransactionScope())
        {
            _dc.Spirit_Users.DeleteOnSubmit(user.First());

            try
            {
                _dc.SubmitChanges();
            }
            catch (Exception exception)
            {
                throw exception;
            }
            scope.Complete();
        }
    }

问题是我必须使用user.First()如果我想要一行,我想用LINQ选择只有一行知道IEnumerable,因为Nick是唯一的。

3 个答案:

答案 0 :(得分:15)

试试这个 - 只选择第一个(如果存在),只有在你得到一个值时删除:

public void DeleteSpiritUser(string nick)
{
    var user = (from u in _dc.Spirit_Users 
                where u.Nick == nick 
                select u).SingleOrDefault();

    if(user != null)
    {
       using (var scope = new TransactionScope())
       {
           _dc.Spirit_Users.DeleteOnSubmit(user);
           _dc.SubmitChanges();
           scope.Complete();
       }
   }
}

答案 1 :(得分:6)

你可以这样做:

var user = _dc.Spirit_Users.Single(u => u.Nick == nick);

答案 2 :(得分:0)

Well First()是将提取第一行(也是唯一一行)的行(加上它会将TOP 1添加到查询中)。 Linq2Sql不知道你只有一行(或者你将拥有任何一行)并准备接收多个,因此IEnmuerable即使有一行也是如此。