У меня есть что-то вроде этого:
public Assignments GetAssignmentsForProider(string provider_k, string recordType)
{
if (recordType == "A")
{
var query = from ea in this.Context.Assignments
where ea.Provider_K == provider_k
&& ea.Active == true
&& ea.RecordType == "A"
select ea;
return query.FirstOrDefault();
}
else if (recordType == "E")
{
var query = from ea in this.Context.Assignments
where ea.Provider_K == provider_k
&& ea.RecordType == "E"
select ea;
return query.FirstOrDefault();
}
}
Две проблемы:
Он не компилируется! потому что ему также нужен оператор return по умолчанию, и я не уверен, что вернуть действительно, но в моей программе никогда не произойдет, что ни одно из этих условий не произойдет. Я всегда в первом или втором.
На самом деле все они разные, в первом мы проверяем Active == true
а во втором - нет. Так есть лучший способ написать это тоже?
Что-то вроде этого?
public Assignments GetAssignmentsForProider(string provider_k, string recordType)
{
var query = from ea in this.Context.Assignments
where ea.Provider_K == provider_k
&& ea.RecordType == recordType
&& (recordType == "E" ? true : ea.Active)
select ea;
return query.FirstOrDefault();
}
Это должно удовлетворить ваши потребности.
Один из способов связать ваши условия...
public Assignments GetAssignmentsForProider(string provider_k, string recordType)
{
var query = from ea in this.Context.Assignments
where ea.Provider_K == provider_k
select ea;
if (recordType == "A")
{
query = from q in query
where q.Active == true
&& q.RecordType == "A"
select q;
}
else if (recordType == "E")
{
query = from q in query
where q.RecordType == "E"
select q;
}
return query;
}
Но у Bjarke Søgaard есть лучший метод фильтрации по типу записи, потому что ваш критерий параметров напрямую соответствует данным запроса... поэтому вы можете просто использовать его напрямую.
Я бы, наверное, написал это так:
public Assignments GetAssignmentsForProider(string provider_k, string recordType)
{
var query = from ea in this.Context.Assignments
where ea.Provider_K == provider_k &&
ea.RecordType == recordType
select ea;
if (recordType == "A")
return query.Where(ea => ea.Active).FirstOrDefault();
else if (recordType == "E")
return query.FirstOrDefault();
return null;
}