Как отфильтровать нули из этого запроса linq? - PullRequest
0 голосов
/ 01 апреля 2011

У меня есть код, который перебирает список списков.

    public static AffiliateList FromDate(string date)
    {
        Console.WriteLine("calling affiliates by date for " + date);
        AffiliateList al;
        try
        {
            al = new AffiliateList(DirectTrackXmlUtility.AffilaitesByDate(date));
        }
        catch (Exception)
        {
            return null;
        }
        return al;
    }

    public override IEnumerator<AffiliateItem> GetEnumerator()
    {
        return (from ru in Inner.resourceURL
                select ru.location
                into date select FromDate(date)
                into listForDate from ru2 in listForDate.Inner.resourceURL
                select AffiliateItem.From(ru2)).
            GetEnumerator();
    }

Вопрос: Как мне изменить код для обработки FromDate, возвращающего ноль?

Примечание: я бы никогда не подумалкак написать этот запрос, но re-sharper сделал это для меня из моих вложенных циклов foreach, и теперь мне интересно посмотреть, смогу ли я заставить его работать ...

Обновление: вот последний linqзапрос, вместе с оригинальным не-linq образом закомментирован.

        return (from ru in Inner.resourceURL
                select ru.location
                into date select FromDate(date)
                into listForDate where listForDate != null from ru2 in listForDate.Inner.resourceURL
                select AffiliateItem.From(ru2)).GetEnumerator();
        //foreach (resourceListResourceURL ru in Inner.resourceURL)
        //{
        //    string date = ru.location;
        //    AffiliateList listForDate = FromDate(date);
        //    if (listForDate != null)
        //    {
        //        foreach (var ru2 in listForDate.Inner.resourceURL)
        //        {
        //            yield return AffiliateItem.From(ru2);
        //        }
        //    }
        //}

Ответы [ 2 ]

1 голос
/ 01 апреля 2011

Как насчет

int date select (FromDate(date) ?? new AffiliateList())

или

from ru in Inner.resourceURL
select ru.location into date 
select FromDate(date) into listForDate 
where listForDate != null
from ru2 in listForDate.Inner.resourceURL
select AffiliateItem.From(ru2)
0 голосов
/ 01 апреля 2011
return Inner.resourceURL.Select(ru => FromDate(ru.location))
                        .Where(d => d != null)
                        .SelectMany(ru => 
                                    ru.Inner.resourceURL
                                      .Select(ru2 => AffiliateItem.From(ru2)))

Простите, что не использовал синтаксис запроса, я просто нахожу цепочку методов гораздо более выразительной.

Также обратите внимание, что это было закодировано без какой-либо IDE, поэтому существует вероятность ошибки.

...