我想从多个表中检索数据,以便为我的项目中的付款人提供服务



想要将数据从多个表检索到服务层,因为我必须将数据库逻辑写入服务层到我的项目中

'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变量,那么为什么需要它呢?

最新更新