【问题标题】:Error with Entity Framework .Any() filterEntity Framework .Any() 过滤器出错
【发布时间】:2012-05-13 13:53:00
【问题描述】:

这是我的查询:

var x = db
   .Users
   .Where(u => u.Locations.Any(l => searchedLocation.Counties.Any(c => c.LocationId == l.LocationId));

上下文:

  • UsersIQueryable<User>。 (EF 对象集)
  • searchedLocation 是一个 Location 对象。
  • CountiesICollection<MiniLocation>

我想要做什么:

返回所有用户,其中这些位置的任何县都具有属于搜索位置的任何县的 locationId。

示例:

搜索纽约市 (LocationId = 1. County1LocationId = 2)

用户:鲍勃。地点:苏活区。 County1LocationId = 2。County2 LocationId = 3。

所以这是一场比赛。 (因为 Soho 有一个 LocationId 为 2 的县,NYC 也是如此)

我收到错误:

无法创建“xxx.xxx.Locations.MiniLocation”类型的常量值。此上下文仅支持原始类型(“例如 Int32、String 和 Guid”)。

有什么想法吗?

【问题讨论】:

    标签: c# linq entity-framework


    【解决方案1】:

    MSDN page 声明不支持此构造。您可以使用 this method for .Net 3.5 Linq to Entities 来帮助替换使用 Any

    【讨论】:

    • 我在 .NET 4 上。好的,我理解错误,但不是您提供的链接中提出的解决方案。任何进一步的建议/例子?
    【解决方案2】:

    你需要构造一个可以搜索的位置ID列表。

    var idsToSearch = "1,2,3,4,5...";    
    

    那么你可以通过以下方式使用Contains

    var x = db
           .Users
           .Where(u => idsToSearch.Contains(u.LocationId));
    

    【讨论】:

    • 我认为这不对。首先,.Contains 只需要TIEnumerable<T>。其次,这只会匹配任何县包含搜索位置的位置 ID,而我想要任何县包含任何搜索位置县。复杂,我知道。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    • 2019-08-11
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多