我试图只选择一列,但它抛出可查询集合无法转换为整数的错误。
public int GetID(int ID)
{
int ID = Convert.ToInt32(uow.repo.GetQueryable()
.Where(rh => rh.ID == ID && rh.Status == 0)
.OrderByDescending(o => o.Rev).Select(s => s.ID));
return ID;
}
您正在尝试将集合转换为 int。
由于集合包含(可能(多个 int,因此没有很好地定义,因此存在错误。
要修复它,您必须确保只选择一个 int。
例如:
int ID = Convert.ToInt32(
uow.repo.GetQueryable()
.Where(rh => rh.ID== ID && rh.Status == 0)
.OrderByDescending(o => o.Rev)
.Select(s=>s.ID) //this still is a collection
.First()); //this takes the first one.
本着@Mong Zo的评论的精神:
您还有更多的可能性可以解决此问题:
.First(( 如果集合为空,这将引发错误
.Single((,如果集合不包含正好 1 个项目,这将引发错误
然后还有:
.SingleOrDefault(( 和 .FirstOrDefault 它们相似,但都允许空列表。
注意::FirstOrDefault
或SingleOrDefault
将返回Convert.ToInt32
0
列表为空。
这里只有几点
-> 我认为 uow.repos id 列已经是 int 类型(我不知道你是如何定义的(如果是,那么您不需要将其转换为 int cos 它已经在 int 中
public int GetID(int ID)
{
return (uow.repo.GetQueryable()
.Where(rh => rh.ID == ID && rh.Status == 0)
.OrderByDescending(o => o.Rev).First(s => s.ID));
}
->如果它不是整数类型,那么我会推荐这样的东西
public int GetID(int ID)
{
return (Convert.ToInt32(uow.repo.GetQueryable()
.Where(rh => rh.ID == ID && rh.Status == 0)
.OrderByDescending(o => o.Rev).First(s => s.ID)));
}
如果其可为空的整数,那么您应该尝试隐式转换
public int GetID(int ID)
{
return ((int)uow.repo.GetQueryable()
.Where(rh => rh.ID == ID && rh.Status == 0)
.OrderByDescending(o => o.Rev).First(s => s.ID));
}