使用linq查询调用get方法?

时间:2014-02-14 17:53:36

标签: c# asp.net-mvc linq-to-sql asp.net-web-api

我试图在web api中调用以下get方法,但我目前遇到编译错误 - 'bool'不包含'password'的定义,并且没有扩展方法'password'接受类型'的第一个参数可以找到bool'(您是否缺少using指令或程序集引用?) - 错误

用户类:

 public class User : iUser
  {
    private cdwEntities db;

    public User()
    {
        db = new cdwEntities();
    }

    public User(cdwEntities context)
    {
        db = context;
    }


    public bool Validate(string username, string password)
    {

        var query = from t in db.Trial_Try
                    join u in db.UserDetails on t.tUID equals u.uID
                    where t.tExpiryDate >= DateTime.Now &&
                    t.tPublication.Value == 163 &&
                    u.uUsername == username &&
                    u.uPassword == password
                    select u; //

        // "execute" the query
        return query.FirstOrDefault() != null; 

    }

测试类:

  public HttpResponseMessage GetValidate(string username, string password)
    {
        User layer = new User();

        var result = layer.Validate(username, password);

        ***if (result.username != null && result.password != null)***
        {

            var mes = string.Format("Success");
            return Request.CreateErrorResponse(HttpStatusCode.NotFound, mes);
        }
        else
        {
            //var mis = string.Format("User {0} not found");
            //return Request.CreateErrorResponse(HttpStatusCode.NotFound, mis, result);
            return null;
        }

    }

2 个答案:

答案 0 :(得分:2)

Validate返回一个布尔值,而不是查询的结果。正如@ekad所述,直接将结果检查为布尔值。

作为额外的优化,考虑使用.Any而不是FirstOrDefault,因为您不需要水合结果并且可以将SQL优化为Exists查询而不是选择top 1.您的验证方法可以是:

public bool Validate(string username, string password)
{

    var query = from t in db.Trial_Try
                join u in db.UserDetails on t.tUID equals u.uID
                where t.tExpiryDate >= DateTime.Now &&
                t.tPublication.Value == 163 &&
                u.uUsername == username &&
                u.uPassword == password
                select u; //

    // "execute" the query
    return query.Any(); 

}

答案 1 :(得分:1)

问题是resultbool且没有usernamepassword属性,因此您需要替换此行

if (result.username != null && result.password != null)

用这个

if (result)