c# – 如何在选择视图模型时在IQueryable中添加新的where条件?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 如何在选择视图模型时在IQueryable中添加新的where条件?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2108字,纯文字阅读大概需要4分钟。
内容图文
我对C#和.Net相当新,所以如果事情没有意义,我会道歉,我会尽力解释我的问题.
我有两种方法,基本上将使用类似的查询但略有不同.因此,我没有在两个方法中重复查询,而是创建了第三个私有方法,它将返回查询的公共部分,然后函数可以根据需要在查询中添加更多子句.
这是一个泛型函数,它返回IQueryable对象和查询的公共部分
private IQueryable<OfferViewModel> GetOffersQueryForSeller(int sellerId)
{
return Db.Offers
.Where(o => o.Sku.SellerId == sellerId && o.IsActive && !o.IsDiscontinued)
.Select(o => new OfferViewModel
{
Id = o.Id,
Name = o.Sku.Name,
ImageUrl = o.Sku.ImageUrl ?? o.Sku.Upcq.Upc.ImageUrl,
QuantityName = o.Sku.QuantityName
});
}
以下是重用IQueryable对象的两种方法
public async Task<List<OfferViewModel>> GetSellerOffers(int sellerId)
{
var query = GetOffersQueryForSeller(sellerId);
return await query.ToListAsync();
}
public async Task<List<OfferViewModel>> GetDowngradableSellerOffers(int sellerId)
{
var query = GetOffersQueryForSeller(sellerId);
return await query
.Where(o => o.Sku.Id == monthlySkuId)
.ToListAsync();
}
现在GetSellerOffers工作得很好,但GetDowngradableSellerOffers引发运行时错误消息LINQ to Entities中不支持指定类型成员’Sku’.我问周围,其中一个人告诉我,添加一个选择后我无法添加额外的地方它使用ViewModel,因为我的记录将映射到ViewModel,LINQ将尝试查找ViewModel而不是数据库列的道具.
现在我有两个问题,
>在我阅读的文档中,实体框架只会在我尝试使用ToList等方法获取结果时运行查询,如果我没有这样做,为什么它不允许我在数据库字段上应用条件/
>如何在我的场景中重用常见查询?
解决方法:
以下代码怎么样:
(类型Offer应该由Db.Offers持有的Elements类型替换)
private IQueryable<OfferViewModel> GetOffersQueryForSeller(int sellerId, Func<Offer,bool> whereExtension)
{
return Db.Offers
.Where(o => ... && whereExtension.Invoke(o))
.Select(o => new OfferViewModel { ... });
}
private IQueryable<OfferViewModel> GetOffersQueryForSeller(int sellerId)
{
return GetOffersQueryForSeller(sellerId, (o) => true);
}
然后在GetDowngradableSellerOffers中调用它,如下所示:
public async Task<List<OfferViewModel>> GetDowngradableSellerOffers(int sellerId)
{
var query = GetOffersQueryForSeller(sellerId, (o) => o.Sku.Id == monthlySkuId);
return await query.ToListAsync();
}
内容总结
以上是互联网集市为您收集整理的c# – 如何在选择视图模型时在IQueryable中添加新的where条件?全部内容,希望文章能够帮你解决c# – 如何在选择视图模型时在IQueryable中添加新的where条件?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。