2015-07-23 3 views
2

Как я могу исправить такую ​​ситуацию? Я хочу использовать глобальные «var latestTests», могу ли я использовать объект или что-то еще? Это просто общее linqstatement, если мне нужно и для более сложных ситуаций.Ключевое слово Linq и var

var latestTests = ???? 

if(all == "") { 
    latestTests = db.PatientChecklists.Where(x => 
    x.PatientMedicine.Patient.ClinicId == clinicID).OrderBy(x =>   
    x.NextTest).Take(10); 
    } 
    else { 
    latestTests = db.PatientChecklists.Where(x => 
    x.PatientMedicine.Patient.ClinicId == clinicID).OrderBy(x =>   
    x.NextTest); 
    } 
+0

почему вы хотите использовать глобальный 'latestTests'? Что вы собираетесь с ним делать вне сферы контекста if/else? Предполагая, что вы используете 'var', потому что вам не нужен тип возврата в первую очередь ... –

+0

Объявите его как' IEnumerable ' –

+0

Вы не можете использовать var в такой ситуации, как этот. Вы должны явно указать тип переменной. Ключевое слово var используется для случаев, когда тип может определяться неявно детерминированным образом. –

ответ

13

У вас есть избыточный код. Как об этом:

var latestTests = db.PatientChecklists 
     .Where(x => x.PatientMedicine.Patient.ClinicId == clinicID) 
     .OrderBy(x => x.NextTest); 

if(all == "") 
{ 
    latestTests = latestTests.Take(10); 
} 

Edit: В более усложняют ситуацию, я бы не инициализирует var latestTests во внешней области видимости. Либо не используя var, либо перемещая все это по отдельному методу.

+0

Это на самом деле лучшее решение и значительно упрощает код. –

+1

@MattBurland Правило № 1: нет дублирующего кода;) –

9

Вы не можете использовать var здесь, вам необходимо объявить тип объекта:

IOrderedEnumerable<Foo> latestTests; 

Хотя как @AlexH указывает, можно упростить запрос и устранить необходимость для внешняя декларация.

+0

Вы можете использовать 'PatientChecklists' вместо' Foo', так как он дал его в коде .... – DrewJordan

+1

@DrewJordan Это имя таблицы, а не тип. –

+0

Да, я знаю. это, вероятно, что-то близко, но нет? Просто сказать все. – DrewJordan

1

Воспользуйтесь conditional operator

var latestTests = all != "" ? 
    db.PatientChecklists.Where(x => x.PatientMedicine.Patient.ClinicId == clinicID).OrderBy(x => x.NextTest).Take(10) : 
    db.PatientChecklists.Where(x => x.PatientMedicine.Patient.ClinicId == clinicID).OrderBy(x => x.NextTest); 
+1

Я бы не стал писать коды в два раза, как это. Поскольку Алекс заявил о правиле № 1 – Kiryl

+0

@Kiryl, я согласен, но OP написал: «Это просто общее linqstatement, если мне нужно и для более сложных ситуаций». –

Смежные вопросы