c# – 如何在选择视图模型时在IQueryable中添加新的where条件?

c# – 如何在选择视图模型时在IQueryable中添加新的where条件?,第1张

概述我对C#和.Net相当新,所以如果事情没有意义,我会道歉,我会尽力解释我的问题. 我有两种方法,基本上将使用类似的查询但略有不同.因此,我没有在两个方法中重复查询,而是创建了第三个私有方法,它将返回查询的公共部分,然后函数可以根据需要在查询中添加更多子句. 这是一个泛型函数,它返回IQueryable对象和查询的公共部分 private IQueryable<OfferViewModel> Get 我对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条件?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1233146.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存