如何使用'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()
的调用返回一个布尔值,该值指示是否找到任何记录。
如果你想返回实际的记录,试试这个:
- 将
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.