【问题标题】:Trouble with SQL statement for count(*)count(*) 的 SQL 语句出现问题
【发布时间】:2013-07-30 13:31:17
【问题描述】:
我正在使用在 Visual Studio 2010 中创建的 SQL 数据服务器。我想查看具有某些用户名的用户数。
var x = from u in db.UserInfoes
where
u.Password == password &&
u.Username == username
select count(*);
我的问题是count(*)。VS不接受这个。有没有办法写这个?
【问题讨论】:
标签:
.net
sql
visual-studio-2010
linq-to-sql
【解决方案1】:
你也可以这样做:
var x = db.UserInfoes
.Count(u => u.Password == password && u.Username == username);
where 子句可以看作是多余的,因为您可以将过滤器(谓词)放在 Count() 方法中
但是由于您正在检查 SINGLE 记录(假设只有一个用户匹配用户名和密码组合)您实际上想使用 ANY 方法并获取布尔值
var x = db.UserInfoes
.Any(u => u.Password == password && u.Username == username);
any 会比 count 稍微快一点,因为它会在找到匹配项后立即返回 true,而不是遍历整个表来确保准确计数。
【解决方案2】:
您必须依靠退回的收藏。
var x = (from u in db.UserInfoes
where u.Password == password &&
u.Username == username
select u).Count();
【解决方案3】:
其实你可以在 Count 扩展中设置谓词:
var x = db.UserInfoes.Count(u => u.Password == password && u.Username == username)
【解决方案4】:
使用扩展方法,
var x = db.UserInfoes
.Where(u => u.Password == password && u.Username == username)
.Count();
【解决方案5】:
var x = from u in db.UserInfoes
where u.Password == password &&
u.Username == username
select u;
使用
int i = (x != null) ? x.Count() : 0;