如何使用'Any'在可查询的方法中

本文关键字:方法 查询 Any 何使用 | 更新日期: 2023-09-27 17:50:40

我试图让我的查询输出所有数据,如果给定任何参数'名称'和'价格'或名称。我尝试使用"任何"参数,但它给了我——不能隐式地将类型"bool"转换为——错误。

我以前使用'FirstOrDefault',但这只是输出第一个记录的详细信息。

它们是我可以使用或查看的另一个函数吗?

用户类:

  public database_ab getData(Query query)
    {
        var data = db.database_ab.AsQueryable();
        if (query.name != null)
        {
            data = data.Where(c => c.Name == query.name);
        }
        if (query.price != null)
        {
            data = data.Where(c => c.Price == query.price);
        }
        return data.Any();
    }

项控制器:

public HttpResponseMessage getData([FromUri] Query query)
    {
        User layer = new User();
       // if (User.IsInRole("user"))
       // {
            var result = layer.getData(query);
            if (result == null)
            {
                // return HttpResponseMessage
                var message = string.Format("No data was found");
                return Request.CreateErrorResponse(HttpStatusCode.NotFound, message);
            }
            return Request.CreateResponse(HttpStatusCode.OK, result);
       // }
    }

非常感谢您的时间和帮助

如何使用'Any'在可查询的方法中

.Any()的调用返回一个布尔值,该值指示是否找到任何记录。

如果你想返回实际的记录,试试这个:

  • return data.Any();更改为return data;
  • 将方法的返回类型从database_ab更改为IEnumerable<database_ab>

您可以简单地返回数据变量对象,即

public IEnumerable<database_ab> getData(Query query)
    {
        var data = db.database_ab.AsQueryable();
        if (query.name != null)
        {
            data = data.Where(c => c.Name == query.name);
        }
        if (query.price != null)
        {
            data = data.Where(c => c.Price == query.price);
        }
        return data;
    }

Any扩展方法的返回类型为bool;如果集合中的某些项符合给定的条件,则返回true。语法正确的做法是只返回data而不是data.Any();也许这已经解决了问题。

您应该做两个更改:首先更改返回类型

//you are returning a single element
public database_ab getData(Query query)

//you are going to return many elements
public IEnumerable<database_ab> getData(Query query)

,然后返回data对象

return data;
}

方法.Any()表示"集合中的任何项是否满足此条件?",如

var Coll = new List<int> { 1, 2, 3, 4 };
// is any element of Coll greater than 2 ?
var myCondition = Coll.Any(element => element > 2);

return data.Any();没有任何意义。

Any()根据条件返回布尔值。

eg: data = data.Any(c => c.Name == query.name); 

根据条件的结果返回布尔值。

如果你想返回所有的数据,只需执行

return data;

return data.Tolist();  // if you want the result in list.