检查逗号分隔的字符串中的id是否与另一个字符串数组中的id相匹配。

问题描述 投票:0回答:1

我在DB主设置审批和订单详情中有两张表,我想在任何主审批设置时,检查该采购订单是否会在CostCenter上进行。

表 Master Setup Approval:

|-------|---------|-------------|-------------|---------------|---------------------|
|    ID |    Name |   CRG_COM_ID|  CRG_BRN_ID |ApprovalTypeId |CostCenter(string)   |
|-------|---------|-------------|-------------|---------------|---------------------|                            
|    1  | Setup1  |     1       |     1       |     1         |    "1,2,5,7"        |
|-------|---------|-------------|-------------|---------------|---------------------|
|    2  | Setup2  |     1       |     1       |     1         |     "1,3,6"         |     
|-------|---------|-------------|-------------|---------------|---------------------|

表OrderDetails :

|-------|---------|-------------|-------------|------------------|
|    ID |    Name |   CRG_COM_ID|  CRG_BRN_ID |CostCenterID(long)|
|-------|---------|-------------|-------------|------------------|                            
|    1  | Item1   |     1       |     1       |       1          |
|-------|---------|-------------|-------------|------------------|
|    2  | Item2   |     1       |     1       |       7          |     
|-------|---------|-------------|-------------|------------------|

这是我的代码。

var orderDetails = db.OrderDetails.Where(c => c.OrderId == orderId);
var  costc = orderDetails.Select(c => c.CostCenterId.Value).ToList().ConvertAll<string>(delegate (long i) { return i.ToString(); });   
var ApprovalProcess_Count12 = db.MasterSetupApproval.Where(x =>
    x.CRG_COM_ID == order.CompanyId &&
    (x.CRG_BRN_ID == null || x.CRG_BRN_ID == order.BranchId) &&
    x.ApprovalTypeId == (int)ApprovalTypes.PO &&
    x.CostCenter.Split(',').Select(aee => aee).Any(val => costc.Contains(val))
).ToList();

我得到了以下错误:

LINQ to Entities does not recognize the method 'System.String[] Split(Char[])' method, and this method cannot be translated into a store expression.

输出的内容应该是

|-------|---------|-------------|-------------|---------------|---------------------|
|    ID |    Name |   CRG_COM_ID|  CRG_BRN_ID |ApprovalTypeId  |CostCenter(string)   |
|-------|---------|-------------|-------------|---------------|---------------------|                            
|    1  | Setup1  |     1       |     1       |     1         |    "1,2,5,7"        |
|-------|---------|-------------|-------------|---------------|---------------------|
c# asp.net-mvc entity-framework linq linq-to-entities
1个回答
0
投票

假设你使用的是一个设计不好的DB(正如Crowcoder所指出的),在数据库中不应该出现逗号分隔的值,你可以参考一下 这个 来解决你的方式。

HTH!

© www.soinside.com 2019 - 2024. All rights reserved.