1. C# / Говнокод #3650

    +107

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    private PostsPageViewModel GetUserPosts(Guid userId, int? pageIndex)
    {
    	var posts = entitiesDB.Posts
    		.Where(post => post.UserId == userId)
    		.OrderByDescending(p => p.DateCreated)
    		.Select(post => new PostViewModel()
    		{ 
    			Contents = post.Contents, 
    			DateCreated = post.DateCreated, 
    			PostId = post.PostId, 
    			AuthorId = userId,
    			AssociatedTags = post.Tags.Select(t => new TagViewModel() { TagId = t.TagId, Contents = t.Contents }).ToList()
    		})
    		.ToPagedList(pageIndex ?? 1, 10);
    
    	PostsPageViewModel viewModel = new PostsPageViewModel()
    	{
    		Posts = posts,
    		RouteValues = new { controller = "Posts", action = "UserPosts" }
    	};
    
    	return viewModel;
    }

    Проект под ASP.NET MVC. Метод должен вернуть в вид заданную страницу постов из базы для заданного юзверя, посортить и прицепить ассоциированные с сообщением теги. Мало того, что это всё в одном операторе, так оно ещё и крашится.

    Запостил: eigenein, 06 Июля 2010

    Комментарии (22) RSS

    • Нормальный код. А крашится наверно через null в БД. Поменяй типы полей у объекта Posts на Nullable<>
      Ответить
      • Нет, краш был на вызове ToList(). Select возвращал объект, который не поддерживал этот метод.
        Ответить
        • А вот не надо забывать, что Linq2sql это вам не linq2object
          Ответить
        • ето вин
          гопнет скатывается в сраненькое говно
          где ето видано "не поддерживает метод" в статически типизированном языке
          Ответить
          • Да вот сам не ожидал, когда получил "Method ToList() is not recognized for ..."
            Ответить
          • Каким образом статическая типизация относится к MyType ToList() { throw new NotSupportedException(); }

            ?
            Ответить
            • во-первых throw new NotSupportedException(); ничем не лучше "NoMethodError: undefined method"
              во-вторых там таки не "NotSupportedException"
              так-то
              Ответить
              • Пока не увижу конкретики, не пойму.
                Ответить
                • >не увижу конкретики
                  Тебе нужно одеть очки или сделать операцию на глаза.

                  >не пойму
                  Извини, но операции на мозг для таких целий не проводят.
                  Ответить
    • Код хороший. Почти образцовый.

      Для контраста можно развернуть (скажем ручками) все экстеншн методы и инициализаторы, и попробовать в полученной каше поискать баг.

      А баги? Ну дык это просто от несоответствия предметной области и реализации, любая функция будет работать только в определённых условиях и предположениях относительно входных данных. А если эта функция делает что-то конкретное - то тем более.
      Ответить
    • Люди, неужели вам реально нравиться linq?
      Ответить
      • Мне нравится. Очень удобно строить запросы в стиле SQL, но к коллекциям. Кода становится намного меньше и нет партянок из if-for.
        Ответить
        • Что такое "в стиле sql", и о каких портянках Вы гововрите?
          Ответить
          • Да тут на говнокоде таких портянок if-else-for просто бездонная бочка в любом разделе. Просто зайдите в соседние посты говнокодов.
            Ответить
            • А вот у меня в коде иф-элсов мало. Я, извините за пафос, использую "замену условной логики состоянием/стратегией".

              И без всякого linq:)
              Ответить
              • Ну вот например даже без портянок if-else, но говно:
                http://www.govnokod.ru/3218
                Вот с линкью бы это бы нормально смотрелось.
                К слову сказать, в С++\CLI линкью есть.
                Ответить
              • Ну или вот:
                http://www.govnokod.ru/3126
                Тоже без портянок if-else, но они бы могли там быть.
                С линкью это делается на раз.
                Ответить
                • И то и другое можно решить без linq:) Будет проще и красивее.. нет?
                  Ответить
          • >в стиле sql
            Ну тоесть выглядит это всё, как запрос к бд на SQL. Я в своё время на PHP программировал сайты, а там часто используются запросы к бд и после этого мне нравится стиль SQL. Тоесть не нужно переучиваться на новый язык что-ли. Вообщем дело привычки.
            Ответить

    Добавить комментарий