Как обработать никаких результатов в LINQ? - PullRequest
9 голосов
/ 07 октября 2010

в этом примере код

public Company GetCompanyById(Decimal company_id)
{
    IQueryable<Company> cmps = from c in db.Companies
                               where c.active == true && 
                                     c.company_id == company_id
                               select c;
    return cmps.First();
}

Как мне поступить, если нет данных в cmps?

cmps никогда не будетбыть нулевым , так как я могу проверить несуществующие данные в LINQ Query ?

, чтобы я мог избежать этого

'cmps.ToList()' threw an exception of type ... {System.NullReferenceException}

при преобразовании их внапример, Список

GetCompanyById(1).ToList();

Всегда ли мне нужно , чтобы обернуть его в блок try catch?

Ответы [ 5 ]

16 голосов
/ 07 октября 2010

Вы можете использовать Queryable.Any () (или Enumerable.Any () ), чтобы увидеть, есть ли член в cmps. Это позволит вам выполнять явную проверку и обрабатывать ее так, как вы пожелаете.

Если ваша цель - просто вернуть null, если совпадений нет, просто используйте FirstOrDefault вместо First в вашем выражении возврата:

return cmps.FirstOrDefault();
5 голосов
/ 07 октября 2010

Как насчет применения .Any или .Count ()?

Вот пример на MSDN

List<int> numbers = new List<int> { 1, 2 };
bool hasElements = numbers.Any();
Console.WriteLine("The list {0} empty.",
                    hasElements ? "is not" : "is");

Или просто используйте оператор?:

return myExample.Any() ? myExample.First() : null;
2 голосов
/ 07 октября 2010

Возвращает первый, если он есть, или ноль, если его нет:

return (from c in db.Companies
where c.active == true && 
c.company_id == company_id
select c).FirstOrDefault();
1 голос
/ 09 февраля 2013
        var context = new AdventureWorksLT2008Entities();
        var cust = context.Customers.Where(c => c.CustomerID == 1);
        if (cust.Any())
        {
            Customer c = cust.First(); 
        }
1 голос
/ 07 октября 2010

Попробуйте return cmps.Count()==0?null:cmp.First()

Таким образом, если значение равно нулю, оно просто вернет пустую компанию, а если нет, то вернет первое в списке.

Выезд http://en.wikipedia.org/wiki/Ternary_operation

...