我开始处理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是唯一的。
答案 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即使有一行也是如此。