繁体   English   中英

如何从SQL Server 2014使用LINQ lambda表达式返回多行?

[英]How to return multiple rows using LINQ lambda expression from SQL Server 2014?

我正在尝试使用LINQ lambda表达式从SQL Server 2014中获取数据,这是我的项目的要求。 但是,由于我是LINQ的新手,所以我认为这里的代码在做错事情,并且遇到了错误。

我只能读取一行而没有任何错误,但是如果我把条件提取到多行中,那么我会报错。

这是我的代码-这是存储库类:

    public DettagliModel GetByIdDoc(int id)
    {
        using (var dbCtx = new USDevEntities())
        {
            var dettagli = dbCtx.Dettaglis.Where(x => x.IDDoc == id);

            if (dettagli != null)
            {
                return ConvertTo(dettagli); // Getting error here 
            }
            else
            {
                return null;
            }
        }
    }

    public DettagliModel ConvertTo(Dettagli entity)
    {
        var model = Mapper.Map<DettagliModel>(entity);
        return model;
    }

我收到此错误:

参数1:无法从“ System.Linq.IQueryable”转换为“ DAL.Service.Entity.Dettagli” Core.Service

编写代码时遇到此错误,但如果我把

   .Where(x => x.IDDoc == id).FirstOrDefault();

然后错误消失。

请建议我该怎么做才能解决此问题,因为我需要获取多行,所以无法使用FirstOrDefault()方法。 谢谢。

Where扩展方法返回IQueryable<T>这意味着它是一个以上的元素。 如果要使用Automapper将多个实体映射到其他模型,则建议您使用ProjectTo<T>扩展方法:

public IEnumerable<DettagliModel> ConvertTo(IQueryable<Dettagli> entities)
{

    return entities.ProjectTo<DettagliModel>().ToList();
}

public IEnumerable<DettagliModel> GetByIdDocs(int id)
{
    using (var dbCtx = new USDevEntities())
    {
        return ConvertTo(dbCtx.Dettaglis.Where(x => x.IDDoc == id));

    }

}

首先,它永远不会为空:

var dettagli = dbCtx.Dettaglis.Where(x => x.IDDoc == id);

另外,当某些东西是IEnumerable<T>时,请不要返回null ,而应使用Enumerable.Empty<T>()


现在,您的方法看起来将返回单个DettagliModel ,由ConvertTo从单个Dettagli创建。

您可能需要将返回类型更改为IEnumerable<DettagliModel>

这样,您现在就可以使用.Select将数据库实体投影到您自己的类型中:

return
    dettagli.Select(d => ConvertTo(d)); 
    //or just dettagli.Select(ConvertTo); if you like.

这将是一个懒惰的集合,所以我可能会在最后使用.ToList() (然后是.AsReadOnly()或使用.ToArray() YMMV)将其转换为非懒惰的.ToList()

.Where(x => x.IDDoc == id).ToList();

返回List<dbCtx.Dettaglis>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM