想要将数据从多个表检索到服务层,因为我必须将数据库逻辑写入服务层到我的项目中
'KeysPlus.Service.Models.QuoteModel' to 'System.Collections.Generic.IEnumerable'. 存在显式转换(您是否缺少强制转换?
任何帮助都非常感谢!
public static IEnumerable<QuoteModel> GetJobQuotes(Login login, QuoteModel model)
{
using (var db = new KeysEntities())
{
var quotes = db.JobQuote.Where( x=> x.ProviderId == login.Id);
model = (from q in db.JobQuote
join j in db.Job on q.JobId equals j.Id
join p in db.Property on j.PropertyId equals p.Id
join a in db.Address on p.AddressId equals a.AddressId
select new QuoteModel
{
JobDescription=j.JobDescription,
QuoteAmount=q.Amount,
PropertyAddress= a.City
}).ToList();
return model;
}
}
您的方法中有一个名为model
的参数,它是一个QuoteModel
,您尝试将其值设置为QuoteModel
的集合。删除该参数(不使用它)并将代码更改为
using (var db = new KeysEntities())
{
var quotes = db.JobQuote.Where( x=> x.ProviderId == login.Id);
IEnumerable<QuoteModel> model = (from q in db.JobQuote
....
}
您有一个模型实例:
QuoteModel model
您正在尝试将其设置为模型实例的集合:
model = (from q in db.JobQuote
...
).ToList();
苹果不是一篮子苹果。 因此,您需要执行以下两件事之一,具体取决于您实际希望此方法执行的操作...
返回一个模型?
如果要从该列表中查找特定实例,则需要向查询添加一个子句以仅返回该实例。 像.First()
或.FirstOrDefault()
这样的方法可以做到这一点(或.Single()
等效的方法)。 例如,如果您想要一个与特定值匹配的实例,它可能如下所示:
model = (from q in db.JobQuote
...
).First(j => j.ID == someIdentifier);
当然,someIdentifier
是您可以在查询中使用的一些值。 也许model.ID
或类似的东西? 取决于您希望如何查询数据,我们在这里不知道。 但关键是您需要返回一个模型,而不是许多模型。
此外,您需要将方法的返回类型更改为QuoteModel
,因为您只返回一个模型实例。
返回许多模型?
相反,如果您确实想要返回多个模型,则不能将它们放在仅包含一个模型的变量中。 只需直接返回值:
return (from q in db.JobQuote
...
).ToList();
(当然,那么你甚至没有使用model
变量,那么为什么需要它呢?