2012-05-07 17 views
1

У меня есть запрос LINQ:Получить индекс в IQueryable результате

var result = (from CC in hc.ClaimCodings 
           join CM in hc.ClaimCodingProcedureCodeModifierXrefs on CC.ClaimCodingID equals CM.ClaimCodingID 
           join PCM in hc.ProcedureCodeModifiers on CM.ProcedureCodeModifierID equals PCM.ProcedureCodeModifierID 
           where CC.CTCustomerSubID == custSub && CC.ClaimID == claimID 
           select new { PCM.ModifierCode }); 

EDIT

который может вернуть 0 до 4 пунктов. Я хочу, чтобы установить значение каждого кода модификатора к свойству:

 public string ModCode1 { get; set; } 

    public string ModCode2 { get; set; } 

    public string ModCode3 { get; set; } 

    public string ModCode4 { get; set; } 

    Modcode1 = result.ModifierCode.getindex(0).firstordefault(); 

ModeCode2 = second result's ModifierCode; 

etc 

etc 

Если я не подхожу это совершенно неправильно. Я не так хорошо с LINQ пока :(

+0

«Я хочу установить каждый элемент, который возвращается в собственность» ← Не могли бы вы подробно остановиться на этом? Ваш результат в последовательности строк; как вы хотите присвоить их свойству? – Douglas

+0

Извините, я не был очень ясен. Значение, возвращаемое из базы данных, должно быть установлено в свойство. – broke

+1

@broke: Это * все еще * не очень понятно. Помимо всего прочего, непонятно, почему вы используете анонимный тип, а не просто «выбираете PCM.ModifierCode». –

ответ

3

Это то, что вы имеете в виду

var result = 
(
    from CC in hc.ClaimCodings 
     join CM in hc.ClaimCodingProcedureCodeModifierXrefs 
      on CC.ClaimCodingID equals CM.ClaimCodingID 
     join PCM in hc.ProcedureCodeModifiers 
      on CM.ProcedureCodeModifierID equals PCM.ProcedureCodeModifierID 
    where CC.CTCustomerSubID == custSub && CC.ClaimID == claimID && 
     PCM.ModifierCode != null 
    select PCM.ModifierCode 
).ToList(); 

ModCode1 = result.Length > 0 ? result[0] : null; 
ModCode2 = result.Length > 1 ? result[1] : null; 
ModCode3 = result.Length > 2 ? result[2] : null; 
ModCode4 = result.Length > 3 ? result[3] : null; 

Основные изменения:?.

  • Добавлено PCM.ModifierCode != null проверку в пределах LINQ запроса
  • Удалены избыточная анонимная конструкция.
  • Преобразованный результат запроса LINQ к List<string> по ToList().

Однако, как сказал BrokenGlass, вам, вероятно, лучше хранить список.

+0

Я думаю, что это может быть то, что мне нужно. Я использую свойство, чтобы я мог привязать к 4 текстовым полям, находящимся внутри вида списка на веб-форме ASP.NET. – broke

+0

В этом случае, почему вы не используете 'Repeater', который создает' TextBox' для каждого элемента в вашем списке? – Douglas

+0

Никогда не использовал повторитель раньше ... У вас есть пример? – broke

1

Вы можете вызвать ToArray() по результатам, чтобы немедленно выполнить запрос и вернуть массив значений. Затем вы можете присвоить значения свойствам, используя некоторую сокращенную строку оператора, которая проверяет длину массива.

res = result.Take(4).ToArray(); 
Modcode1 = res.Length > 0 ? res[0] : null; 
Modcode2 = res.Length > 1 ? res[1] : null; 
Modcode3 = res.Length > 2 ? res[2] : null; 
Modcode4 = res.Length > 3 ? res[3] : null; 
Смежные вопросы