Самый крутой трюк C # LINQ / Lambdas, который ты когда-либо использовал? - PullRequest
42 голосов
/ 26 августа 2008

Видел пост о скрытых функциях в C #, но не так много людей написали пример linq / lambdas, так что ... интересно ...

Какое самое крутое (как и самое элегантное) использование C # LINQ и / или Lambdas / анонимных делегатов, которых вы когда-либо видели / писали?

Бонус, если он тоже запущен в производство!

Ответы [ 14 ]

1 голос
/ 17 сентября 2008

Я думаю, что LINQ - это серьезное изменение в .NET, и это очень мощный инструмент.

Я использую LINQ to XML на производстве для анализа и фильтрации записей из XML-файла размером 6 МБ (с более чем 20 уровнями узлов) в набор данных в две строки кода.
До LINQ это заняло бы сотни строк кода и дней для отладки.

Это то, что я называю элегантным!

1 голос
/ 26 августа 2008

Я пытался придумать классный способ создать навигационный элемент управления для сайта, который я создавал. Я хотел использовать обычные элементы неупорядоченного списка HTML (с использованием стандартного CSS "Sucker Fish", выглядящего ) с эффектом наведения курсора сверху, который показывает выпадающие элементы. У меня был SQL-зависимый кэшированный DataSet с двумя таблицами (NavigationTopLevels & NavigationBottomLevels). Затем все, что мне нужно было создать два объекта класса (TopNav и SubNav) с несколькими необходимыми свойствами (класс TopNav должен был иметь общий список элементов bottomnav -> List SubItems).

<br>
var TopNavs = from n in ds.NavigationTopLevels
                          select new TopNav
                          {
                              NavigateUrl = String.Format("{0}/{1}", tmpURL, n.id),
                              Text = n.Text,
                              id = n.id,
                              SubItems = new List<SubNav>(
                                  from si in ds.NavigationBottomLevels
                                  where si.parentID == n.id
                                  select new SubNav
                                  {
                                      id = si.id,
                                      level = si.NavLevel,
                                      NavigateUrl = String.Format("{0}/{1}/{2}", tmpURL, n.id, si.id),
                                      parentID = si.parentID,
                                      Text = si.Text
                                  }
                                )

                          };

 List<TopNav> TopNavigation = TopNavs.ToList(); 
<br>

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

0 голосов
/ 28 августа 2013

OLINQ-реагирующие запросы LINQ через INotifyingCollection - это позволяет вам (помимо прочего) выполнять агрегацию в реальном времени для больших наборов данных.

https://github.com/wasabii/OLinq

0 голосов
/ 22 ноября 2008

Работа с атрибутами:

private void WriteMemberDescriptions(Type type)
{
    var descriptions =
        from member in type.GetMembers()
        let attributes = member.GetAttributes<DescriptionAttribute>(true)
        let attribute = attributes.FirstOrDefault()
        where attribute != null
        select new
        {
            Member = member.Name,
            Text = attribute.Description
        };

        foreach(var description in descriptions)
        {
            Console.WriteLine("{0}: {1}", description.Member, description.Text);
        }
}

Метод расширения GetAttributes:

public static class AttributeSelection
{
    public static IEnumerable<T> GetAttributes<T>(this ICustomAttributeProvider provider, bool inherit) where T : Attribute
    {
        if(provider == null)
        {
            throw new ArgumentNullException("provider");
        }

        return provider.GetCustomAttributes(typeof(T), inherit).Cast<T>();
    }
}

AttributeSelection является рабочим кодом, а также определяет GetAttribute и HasAttribute. В этом примере я решил использовать предложения let и where.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...