我试图让我的查询输出所有数据,如果给出任何参数' name'和'价格'或仅限名称。我尝试使用' Any'参数,但它给了我 - 不能隐式转换类型' bool'到 - 错误。
我之前使用的是#FirstDerfault'但那只输出了第一个记录细节。
他们可以使用或调查他们的另一个功能吗?
用户类:
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);
// }
}
非常感谢您的时间和帮助。
答案 0 :(得分:5)
对.Any()
的调用返回一个布尔值,表示是否找到了任何记录。
如果要返回实际记录,请尝试以下操作:
return data.Any();
更改为return data;
database_ab
更改为IEnumerable<database_ab>
。答案 1 :(得分:1)
您只需返回数据变量对象,即
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;
}
答案 2 :(得分:0)
Any
扩展方法的返回类型是bool类型;如果集合中的某些项目符合某些给定标准,则返回true。语法上正确的是返回data
而不是data.Any()
;也许这已经解决了这个问题。
答案 3 :(得分:0)
您应该进行两项更改:首先更改返回类型
//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()
表示&#34; 集合中的任何项是否满足此条件?&#34;,如
var Coll = new List<int> { 1, 2, 3, 4 };
// is any element of Coll greater than 2 ?
var myCondition = Coll.Any(element => element > 2);
答案 4 :(得分:0)
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.