为什么我的 lambda 查询在选择单个列时引发错误



我试图只选择一列,但它抛出可查询集合无法转换为整数的错误。

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 它们相似,但都允许空列表。

注意:FirstOrDefaultSingleOrDefault将返回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)); 
} 

最新更新