无法隐式转换类型System.Linq.IQueryable <anon>到&#39; System.Linq.IQueryable <report>存在显式转换,您是否错过了演员?</report> </anon>

时间:2014-10-05 04:02:58

标签: .net linq

如何从表中选择特定列?我试试这个显示错误 无法将类型'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); 

3 个答案:

答案 0 :(得分:4)

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

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
                        }

答案 1 :(得分:1)

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

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 DataType

答案 2 :(得分:0)

您已使用IQueryable<Query>类型初始化了查询,但后来分配了类型IOrderedQueryable<AnonymousType>的值,因为两种类型都不匹配,这将导致编译时错误。这里的问题是内部类型(QueryAnonymousType)。请修改您的查询,如下所示。

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();