Csharp/C#教程:entity framework:无法创建类型为’System.Collections.Generic.IList`1’的常量值分享


entity framework:无法创建类型为’System.Collections.Generic.IList`1’的常量值

这使我今天无法解决问题。 我有这个简单的查询

var result = DataContext.Accommodations.Where(a => (criteria.MinPrice == null || a.AccommodationRates.Any(r => r.From >= criteria.MinPrice)) && (criteria.MaxPrice == null || a.AccommodationRates.Any(r => r.To  criteria.Locations.Contains(j.Place.PlaceName))) ); 

此查询的最后一行导致我出现问题

 (criteria.Locations == null || criteria.Locations.Count == 0 || a.AccommodationPlaceJoins.Any(j => criteria.Locations.Contains(j.Place.PlaceName))) 

它给出的错误是

无法创建类型为’System.Collections.Generic.IList`1’的常量值。 在此上下文中仅支持基本类型(例如Int32,String和Guid’)。

我甚至没有尝试创建列表。 我在这里尝试做的就是带回与一个地方相关的住宿(Place表中通过AccommodationPlaceJoin表链接到住宿表的地名)等于标准中的任何一个地名.Locations(属于IList类型)。

我已经尝试将此行更改为此,但它不起作用。

 (criteria.Locations == null || criteria.Locations.Count == 0 || a.AccommodationPlaceJoins.Any(j => criteria.Locations.Any(l => l == j.Place.PlaceName))) 

对于比较criteria.Locations == null ,常量值EF无法创建为null criteria.Locations == null 。 您需要将查询拆分为两种情况,并检查查询外的空列表,例如:

 var result = DataContext.Accommodations.Where(a => (criteria.MinPrice == null || a.AccommodationRates.Any(r => r.From >= criteria.MinPrice)) && (criteria.MaxPrice == null || a.AccommodationRates.Any(r => r.To <= criteria.MaxPrice))); if (criteria.Locations != null && criteria.Locations.Count > 0) { result = result.Where(a => a.AccommodationPlaceJoins .Any(j => criteria.Locations.Contains(j.Place.PlaceName))); } 

编辑

BTW:在我看来,编写整个查询会使其更易读,并简化必须发送到数据库的SQL:

上述就是C#学习教程:entity framework:无法创建类型为’System.Collections.Generic.IList`1’的常量值分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)

 IQueryable result = DataContext.Accommodations; if (criteria.MinPrice != null) result = result.Where(a => a.AccommodationRates .Any(r => r.From >= criteria.MinPrice)); if (criteria.MaxPrice != null) result = result.Where(a => a.AccommodationRates .Any(r => r.To <= criteria.MaxPrice)); if (criteria.Locations != null && criteria.Locations.Count > 0) result = result.Where(a => a.AccommodationPlaceJoins .Any(j => criteria.Locations.Contains(j.Place.PlaceName))); 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ctvol.com/cdevelopment/1019335.html

(0)
猴子的爱好者猴子的爱好者
上一篇 2022年1月4日
下一篇 2022年1月4日

精彩推荐