2013-07-30 2 views
2

Я использую SQL Data Server, созданный в Visual Studio 2010. Я хочу видеть число пользователей с некоторым именем пользователя.Проблема с оператором SQL для count (*)

var x = from u in db.UserInfoes 
         where 
         u.Password == password && 
         u.Username == username 
         select count(*); 

Моя проблема - счет (*). VS не принимает это. Есть ли способ написать это?

ответ

3

Вы должны рассчитывать на возвращенную коллекцию.

var x = (from u in db.UserInfoes 
     where u.Password == password && 
       u.Username == username 
     select u).Count(); 
+0

Или написать прямо SQL ... – bluetoft

1

с использованием методы расширения,

var x = db.UserInfoes 
      .Where(u => u.Password == password && u.Username == username) 
      .Count(); 
4

Вы также мог бы сделать это следующим образом:

var x = db.UserInfoes 
    .Count(u => u.Password == password && u.Username == username); 

где положение можно рассматривать как избыточные, так как вы можете поставить фильтр (предикат) прямо внутри метода Count()

Но так как вы проверяете для одной записи (предполагается, что только один пользователь соответствует имя пользователя и пароль комбо) Вы на самом деле хотите использовать какой-либо метод и получить логическое

var x = db.UserInfoes 
    .Any(u => u.Password == password && u.Username == username); 

Любой будет немного быстрее, чем рассчитывать, так как она возвращает истину, как как только он найдет совпадение, вместо того, чтобы пройти всю таблицу, чтобы обеспечить точное количество.

2

Actully вы можете настроить предикат расширения графа:

var x = db.UserInfoes.Count(u => u.Password == password && u.Username == username) 
0
var x = from u in db.UserInfoes 
     where u.Password == password && 
       u.Username == username 
     select u; 

Использование

int i = (x != null) ? x.Count() : 0; 
Смежные вопросы