.net 无法将类型“System.Linq.IQueryable隐式转换为”System.Linq.IQueryable存在显式转换,是否缺少强制转换?

.net 无法将类型“System.Linq.IQueryable隐式转换为”System.Linq.IQueryable存在显式转换,是否缺少强制转换?,.net,linq,.net,Linq,如何从表中选择特定列?我试了一下,这显示了错误 无法将类型“System.Linq.IQueryable”隐式转换为“System.Linq.IQueryable”。存在显式转换,是否缺少强制转换 var query = myRepository.Query().AsQueryable(); query = query.Select(f => new {

如何从表中选择特定列?我试了一下,这显示了错误 无法将类型“System.Linq.IQueryable”隐式转换为“System.Linq.IQueryable”。存在显式转换,是否缺少强制转换

var query = myRepository.Query().AsQueryable();

query = query.Select(f =>
                        new
                        {
                            f.Name,
                            f.Email,
                            f.Message,
                            f.Succeeded,
                            f.ExecutedOn,
                            f.CreatedOn,
                            f.DeletedOn
                        }).Where(file => file.DeletedOn == null).OrderByDescending(f => f.CreatedOn);

return query.ToList();
但当我试着这样做的时候

if (!String.IsNullOrEmpty(searchModel.Name))
          {
              query = query.Where(f =>f.Name.Contains(searchModel.Name));
          }
 query = query.Where(file => file.DeletedOn == null).OrderByDescending(file => file.CreatedOn); 

您已使用IQueryable类型初始化了查询,但后来使用IOrderedQueryable类型的值分配了查询,因为这两种类型不匹配,这将导致编译时错误。这里的问题是内部类型查询,匿名类型。请按以下方式修改您的查询

var query = myRepository.Query().AsQueryable()
                .Select(f =>
                    new
                    {
                        f.Name,
                        f.Email,
                        f.Message,
                        f.Succeeded,
                        f.ExecutedOn,
                        f.CreatedOn,
                        f.DeletedOn
                    }).Where(file => file.DeletedOn == null).OrderByDescending(f => f.CreatedOn);

return query.ToList();

您的第一个查询是生成一个匿名类型。如果需要报表对象列表,则Select调用中的Lambda必须创建报表对象,即:

f =>
                        new
                        {
                            f.Name,
                            f.Email,
                            f.Message,
                            f.Succeeded,
                            f.ExecutedOn,
                            f.CreatedOn,
                            f.DeletedOn
                        }
应该是这样的:

f =>
                        new Report
                        {
                            f.Name,
                            f.Email,
                            f.Message,
                            f.Succeeded,
                            f.ExecutedOn,
                            f.CreatedOn,
                            f.DeletedOn
                        }

创建新的类对象,然后使用它

var result = from mr in myRepository
                     where mr.DeletedOn == null
                     orderby mr.CreatedOn descending
                     select new NewRepository
                     {
                          mr.Name,
                    mr.Email,
                    mr.Message,
                    mr.Succeeded,
                    mr.ExecutedOn,
                    mr.CreatedOn,
                   mr.DeletedOn
                     };

如果您有任何错误,请告诉我您的myRepository数据类型

您的问题是什么?没有关于你想要什么的细节。请提供更多的细节,以便有人会帮助你,这是不正确的。IOrderedQueryable继承IQueryable,因此将前者的实例分配给后者类型的变量没有问题。它不会反过来工作,但这不是一个问题。查看标题中的错误消息;不同之处在于IQueryable的通用类型。请参阅我编辑的答案,前面我也提到了相同的答案,但由于html中的<和>符号行为,我的答案中没有显示它,并且在回答时没有提到内部类型,即Anon和Report。