Проверьте, соответствуют ли идентификаторы в строке, разделенной запятыми, любому идентификатору в другом массиве строк - PullRequest
0 голосов
/ 25 мая 2020

У меня есть две таблицы в разделе «Утверждение настройки мастера базы данных» и «Сведения о заказе», и я хочу проверить При любой настройке основного утверждения этот заказ на покупку будет go на основе CostCenter.

Утверждение настройки мастера таблицы:

|-------|---------|-------------|-------------|---------------|---------------------|
|    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 не распознают метод System.String [] Split (Char []) », и этот метод не может быть преобразован в выражение хранилища.

Результат должен быть:

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

1 Ответ

0 голосов
/ 25 мая 2020

Предполагая, что вы работаете с плохо спроектированной БД (как указывает Crowcoder), что значения, разделенные запятыми, не должны присутствовать в базе данных, вы можете обратиться к этому , чтобы разобраться со своим.

HTH!

...