Условное добавление еще одного условия в оператор LINQ

1

У меня есть что-то вроде этого:

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();
    }
}

Две проблемы:

  1. Он не компилируется! потому что ему также нужен оператор return по умолчанию, и я не уверен, что вернуть действительно, но в моей программе никогда не произойдет, что ни одно из этих условий не произойдет. Я всегда в первом или втором.

  2. На самом деле все они разные, в первом мы проверяем Active == true а во втором - нет. Так есть лучший способ написать это тоже?

Теги:
linq-to-entities

3 ответа

2
Лучший ответ

Что-то вроде этого?

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();
}

Это должно удовлетворить ваши потребности.

1

Один из способов связать ваши условия...

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 есть лучший метод фильтрации по типу записи, потому что ваш критерий параметров напрямую соответствует данным запроса... поэтому вы можете просто использовать его напрямую.

1

Я бы, наверное, написал это так:

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;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню