【发布时间】: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 能解决这个问题吗?
建议的重复链接未提供任何解决此问题的答案。所以不,那没有回答这个问题。
【问题讨论】:
-
@wkl 同样的错误,但是这里不能应用解决方案。
-
我认为您必须在表达式中使用
q.OthersInvolvedUserIDs.Contains(user.ID.ToString())作为粗略的预选,然后通过检查拆分的用户 ID 来优化内存中的结果。 -
不是解决您当前问题的方法,但将外键存储在 CSV 列中有点可疑。为什么不设计您的表以正确实现 n 对多?
-
@rob:我没有创建数据库。但我已经咨询了这里的管理层。我获得了更改数据库的许可。我将更改数据库。因为将 FK 存储为 CSV 列是荒谬的。
标签: c# linq-to-entities