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