Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;表达式树不能包含使用可选参数的调用;在具有拆分字符串实体的LINQ表达式中?_C#_Entity Framework_Linq_.net Core_Webapi - Fatal编程技术网

C# &引用;表达式树不能包含使用可选参数的调用;在具有拆分字符串实体的LINQ表达式中?

C# &引用;表达式树不能包含使用可选参数的调用;在具有拆分字符串实体的LINQ表达式中?,c#,entity-framework,linq,.net-core,webapi,C#,Entity Framework,Linq,.net Core,Webapi,其中,x.deptIds是存储为字符串(用逗号分隔)的部门ID。 Getting erro“表达式树可能不包含使用可选参数的调用或调用”。如何解决这个问题?正如评论所指出的,在一个字段中存储多个值是一个非常糟糕的设计选择,因此没有人会在Linq中使用String.Split 但要回答您的问题,您可以使用String.Contains、String.StarsWith和String.EndsWith,它们可以转换为SQL。例如,您可以编写: var list1 = _context.Employe

其中,x.deptIds是存储为字符串(用逗号分隔)的部门ID。
Getting erro“表达式树可能不包含使用可选参数的调用或调用”。如何解决这个问题?

正如评论所指出的,在一个字段中存储多个值是一个非常糟糕的设计选择,因此没有人会在Linq中使用
String.Split

但要回答您的问题,您可以使用
String.Contains
String.StarsWith
String.EndsWith
,它们可以转换为SQL。例如,您可以编写:

var list1 = _context.Employees.Where(x=> x.EmployeeId.Equals(empId)
                    && **x.deptIds.Split(",")**.ToList().Any(p => (p!=(deptId.ToString()))));

此解决方案可能会发生变化,具体取决于数据库中逗号周围的空格位置。

不要先在字段中存储多个值。这违反了最基本的设计规则。无法将客户端代码(如
String.Split
)转换为SQL,但该代码已存储。这次无法正确更改表设计。有其他代码/解决方案吗?这是否回答了您的问题?由于您是按EmployeeId查找的,我的第一个猜测是,Employees表中只有一行这样的行,所以只需使用
\u context.Employees.FirstOrDefault(x=>x.EmployeeId==empId)
@GSerg获取整行即可,它有一个解决方案。但这不是一个好方法,因为解决方案之一是在数据库对象中获取.ToList(),然后执行其他筛选操作。这会导致响应时间太长。
var list1 = _context.Employees.Where(x=> x.EmployeeId.Equals(empId)
    && (x.deptIds.Contains("," + deptId.ToString() + ",") 
        || x.deptIds.StartsWith(deptId.ToString() + ",") 
        || x.deptIds.EndsWith("," + deptId.ToString()
    ));