2013-06-27 5 views
0

Просмотренные сообщения, но все еще с трудом. Вот мой код:Ошибка: «В этом контексте поддерживаются только примитивные типы или типы перечислений»

var id = Request.QueryString["id"].AsInt(); 
var accountNum = Request.QueryString["accountnum"]; 

var orderIDs = new List<OrderID>(); 

// Order IDs are in the form: OrderNum-OrderLine[,...] 
// e.g. orderids=41417-6,36703-1 

foreach (var orderID in Request.QueryString["orderids"].Split(',')) { 
    var components = orderID.Split('-'); 
    orderIDs.Add(new OrderID() { 
     OrderNum = components[0].AsInt(), 
     OrderLine = components[1].AsInt() 
    }); 
} 

var dbContext = new TelecomEntities(); 
var assignedLines = dbContext.LineAssignments 
    .Where(a => orderIDs 
     .Any(i => a.OrderNum == i.OrderNum && a.OrderLine == i.OrderLine)) 
    .ToList(); 

При запуске этого я получаю сообщение об ошибке: Невозможно создать постоянное значение типа «OrderID». В этом контексте поддерживаются только примитивные типы или типы перечислений.

Из того, что я читал в других сообщениях, я не могу выполнить запрос, потому что orderIDs не находится в контексте dbContent.

Edit: OrderID Класс

public class OrderID 
{ 
    public int OrderNum { get; set; } 
    public int OrderLine { get; set; } 

    public OrderID() { } 
} 
+0

Где ваше объявление класса OrderID? –

+0

Он находится в папке 'App_Code' в' OrderID.cs' –

+0

Извините, я имел в виду, вы могли бы показать нам свое объявление класса OrderID. :-) –

ответ

0

Проблема в том, что EF не может преобразовать ваше сравнение в объект OrderID в SQL. Один из вариантов может заключаться в том, чтобы оставить идентификаторы заказа в виде строк:

var id = Request.QueryString["id"].AsInt(); 
var accountNum = Request.QueryString["accountnum"]; 

string[] orderIDs; 

// Order IDs are in the form: OrderNum-OrderLine[,...] 
// e.g. orderids=41417-6,36703-1 

orderIDs = Request.QueryString["orderids"].Split(','); 

var dbContext = new TelecomEntities(); 
var assignedLines = dbContext.LineAssignments 
    .Where(a => orderIDs 
     .Any(on => on.Equals(a.OrderNum + "-" + a.OrderLine)) 
    .ToList(); 
0

Я держу пари, что это AsInt (который я никогда не видел раньше, но я вижу, что это часть WebPages).

Вы получаете ошибку внутри foreach? Если это так, попробуйте это вместо этого:

 foreach (var orderID in testOrderIDs.Split(',')) 
     { 
      var components = orderID.Split('-'); 
      orderIDs.Add(new OrderID() 
      { 
       OrderNum = int.Parse(components[0]), 
       OrderLine = int.Parse(components[1]) 
      }); 
     } 
+0

Линия, в которой я назначаю 'assignLines', бросает ошибку. –