C# Linq到实体可以';t handle string.split()函数
检查以下代码:C# Linq到实体可以';t handle string.split()函数,c#,linq-to-entities,C#,Linq To Entities,检查以下代码: public IEnumerable<Query> GetAllQueries_FilteredOnCurrentUsersInvolvement(User user) { var queries = _genericUnitOfWork.GenericRepository<Query>().Get(q => q.AuthorUserID == user.ID || q.ConsultantUserID ==
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;
}
public IEnumerable GetAllQueries\u FilteredOnCurrentUsersVolvement(用户)
{
var querys=\u genericUnitOfWork.GenericRepository().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.othersInVolvedUserId)和&q.othersInVolvedUserId.Split(',')。Contains(user.ID.ToString()),
includeProperty:“查询的性质”);
返回查询;
}
它编译得很好。但当您运行代码时:
{“LINQ to实体无法识别方法”System.String[]
Split(Char[])方法,此方法无法转换为
存储表达式。“}
我可以自己编写T-SQL代码。如何使LINQ to实体了解如何处理此问题
p.S>能够解决这个问题吗
建议的重复链接没有提供如何解决此问题的任何答案。因此,没有回答这个问题。拆分操作随查询一起发送,因此需要转换为SQL函数。这没有实现,因此不起作用。您需要检索数据并在内存中执行拆分。我现在也在阅读:@wkl相同的错误,但是解决方案无法在此处应用。我认为您必须使用
q.othersinVolvedUserId.Contains(user.ID.ToString())
在表达式中作为粗略预选,然后通过检查拆分的用户ID来优化内存中的结果。这不是解决眼前问题的方法,但在CSV列中存储外键有点可疑。为什么不将表设计为正确地实现n到多?@rob:我没有创建数据库。但我在这里咨询了管理层。我得到了更改数据库的权限。我将更改数据库。因为将FK存储为CSV列是荒谬的。