【问题标题】:Linq to entities can't handle string.split() functions [duplicate]Linq to entity 无法处理 string.split() 函数[重复]
【发布时间】:2017-02-24 10:06:56
【问题描述】:

检查以下代码:

public IEnumerable<Query> GetAllQueries_FilteredOnCurrentUsersInvolvement(User user)
{
    var queries = _genericUnitOfWork.GenericRepository<Query>().Get(q =>
        q.AuthorUserID == user.ID ||
        q.ConsultantUserID == user.ID ||
        q.CreatorUserID == user.ID ||
        q.EngagementPartnerUserID == user.ID ||
        q.EQCRPUserID == user.ID ||
        q.LeadPartnerUserID == user.ID ||
        q.RMPUserID == user.ID ||
        (!string.IsNullOrEmpty(q.OthersInvolvedUserIDs) && q.OthersInvolvedUserIDs.Split(',').Contains(user.ID.ToString())),
        includeProperties: "NatureOfQuery");
    return queries;
}

它编译得很好。但是当你运行代码时:

{"LINQ to Entities 无法识别方法 'System.String[] Split(Char[])' 方法,并且这个方法不能翻译成 存储表达式。"}

我可以自己编写 T-SQL 代码。如何让 LINQ to Entities 了解如何处理?

P.S>this nuget package 能解决这个问题吗?

建议的重复链接未提供任何解决此问题的答案。所以不,那没有回答这个问题。

【问题讨论】:

  • 我现在也在读这个:stackoverflow.com/questions/23929801/…
  • @wkl 同样的错误,但是这里不能应用解决方案。
  • 我认为您必须在表达式中使用 q.OthersInvolvedUserIDs.Contains(user.ID.ToString()) 作为粗略的预选,然后通过检查拆分的用户 ID 来优化内存中的结果。
  • 不是解决您当前问题的方法,但将外键存储在 CSV 列中有点可疑。为什么不设计您的表以正确实现 n 对多?
  • @rob:我没有创建数据库。但我已经咨询了这里的管理层。我获得了更改数据库的许可。我将更改数据库。因为将 FK 存储为 CSV 列是荒谬的。

标签: c# linq-to-entities


【解决方案1】:

拆分操作与查询一起发送,因此需要转换为 SQL 函数。这没有实现,因此不起作用。您需要检索数据并在内存中执行拆分。

【讨论】:

    猜你喜欢
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    相关资源
    最近更新 更多