Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2015, 12:14   #1
ogamilait
Пользователь
 
Регистрация: 09.11.2013
Сообщений: 60
По умолчанию asp.net linq запрос в запросе (как то так)

Я делаю запрос на выборку новостей друзей:
Код:
var post = (
                from p in db.Posts
                from f in db.Friends
                where f.UserId1 == userId && f.UserId2 == p.User.Id
                select new p)
                .Include(m => m.User)
                .ToList();
К посту есь лайк и дислайк и так же отслежуем нажал ли пользователь лайк или дислайк.
Я это делаю так, нашол все посты потом через foreach каждый проверяю есть ли лайк или дислайк или нету нечево и записую результат в список int потом в view через if выбираю какого цвета делать иконки. Но так не нужно делать это плохо. Кто то может помочь в решении этой проблемы?
Я думал так сделать. Модель с двома свойствами List<Posts> post, и List<int> likeOrDislike. И сделать выборку в одном запросе что именно мне нужно но не хватает знании это сделать.
Буду благодарен за любую помощь.
Код:
            List<int> listLike = new List<int>();

            foreach (var item in post)
            {
                UserPostLike like = db.UserPostLikes.FirstOrDefault(m => m.ContentId == item.Id && m.User.Id == userId);
                if (like != null)
                {
                    if (like.LikeOrDislike)
                        listLike.Add(1);
                    else
                        listLike.Add(2);
                }
                else
                    listLike.Add(0);
            }
            ViewBag.like = listLike;
ogamilait вне форума Ответить с цитированием
Старый 10.02.2015, 16:17   #2
ogamilait
Пользователь
 
Регистрация: 09.11.2013
Сообщений: 60
По умолчанию

В сторону Stored Procedures стоит смотреть?
ogamilait вне форума Ответить с цитированием
Старый 10.02.2015, 22:47   #3
Romanus
Кодер
Форумчанин
 
Регистрация: 27.01.2007
Сообщений: 271
По умолчанию

Код:
ViewBag.like = (
                from p in db.Posts
                from f in db.Friends
                where f.UserId1 == userId && f.UserId2 == p.User.Id
                select new p)
                .Include(m => m.User)
                .Include(m => m.User.UserPostLikes)
                .Select(m=> m.UserPostLikes.Any(a=> a.UserId == m.User.UserId) ? (m.UserPostLikes.Any(a=> a.UserId == m.User.UserId && a.LikeOrDislike) ? 1 : 2) : 0 ))
                .ToList();

Последний раз редактировалось Romanus; 10.02.2015 в 22:59. Причина: случайное нажатие на save
Romanus вне форума Ответить с цитированием
Старый 11.02.2015, 22:12   #4
ogamilait
Пользователь
 
Регистрация: 09.11.2013
Сообщений: 60
По умолчанию

Цитата:
Сообщение от Romanus Посмотреть сообщение
Код:
ViewBag.like = (
                from p in db.Posts
                from f in db.Friends
                where f.UserId1 == userId && f.UserId2 == p.User.Id
                select new p)
                .Include(m => m.User)
                .Include(m => m.User.UserPostLikes)
                .Select(m=> m.UserPostLikes.Any(a=> a.UserId == m.User.UserId) ? (m.UserPostLikes.Any(a=> a.UserId == m.User.UserId && a.LikeOrDislike) ? 1 : 2) : 0 ))
                .ToList();
Это хочет в фигруные душки select new { p }).
И десь ошибка теперь .Include(m => m.User) Cannot convert lambda expression to type 'string' because it is not a delegate type
ogamilait вне форума Ответить с цитированием
Старый 12.02.2015, 10:46   #5
Romanus
Кодер
Форумчанин
 
Регистрация: 27.01.2007
Сообщений: 271
По умолчанию

Я просто предложил тебе вариант решения. Я не знаю в чем именно находиться UserPostLikes, предположил что в User. Ошибка с Include в том что он требует строковой параметр а ты указал выражение. Надо Include("User"))
Romanus вне форума Ответить с цитированием
Старый 12.02.2015, 11:17   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Include умеет и не строки. (в using надо System.Data.Entity вроде).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 16.02.2015, 20:59   #7
ogamilait
Пользователь
 
Регистрация: 09.11.2013
Сообщений: 60
По умолчанию

Цитата:
Сообщение от Romanus Посмотреть сообщение
Я просто предложил тебе вариант решения. Я не знаю в чем именно находиться UserPostLikes, предположил что в User. Ошибка с Include в том что он требует строковой параметр а ты указал выражение. Надо Include("User"))
Я благодарен за любую помощь.
Не полностю описал все подробности.
UserPostLikes таблица имеет примерно такую структуру:
Id|PostId|LikeOrdislike|User

Щас вот так: (то же самое почти просто выборка новостей что б пример по проще).
Код:
var post = (
                from p in db.Posts
                where p.User.Id == urlId
                select p)
                .Include(m => m.User)
                .ToList();
List<int> listLike = new List<int>();
 
            foreach (var item in post)
            {
                UserPostLike like = db.UserPostLikes.FirstOrDefault(m => m.ContentId == item.Id && m.User.Id == userId);
                if (like != null)
                {
                    if (like.LikeOrDislike)
                        listLike.Add(1);
                    else
                        listLike.Add(2);
                }
                else
                    listLike.Add(0);
            }
            ViewBag.like = listLike;
Пробовал с вашего примера сделать вот так, но что то пошло не так выводит дубликати. А теперь и вовсе не работает.
Код:
var test = (
                from post in db.Posts
                from like in db.UserPostLikes
                where post.User.Id == urlId
                select new { post.User, post, test1 = (like.User.Id == post.User.Id) ? ((like.User.Id == post.User.Id && like.LikeOrDislike) ? 1 : 2) : 0 })
                .Include(p => p.User)
                .ToList();
Мне не мешало б что то почитать сначала. Буду благодарен за полезные уроки или мануалы по linq

Последний раз редактировалось ogamilait; 16.02.2015 в 21:48.
ogamilait вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
asp.net LINQ SQL выборка с двох таблиц ogamilait SQL, базы данных 11 10.02.2015 20:27
Linq to sql + asp.net vb Silvan90 ASP.NET 6 18.02.2013 21:59
Удаленный SQL-сервер Ado.Net + .Net remoting + Asp .Net gammaray Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 2 22.11.2010 17:36
ASP.NET. Как лучше всего сохранить запрос? Stilet ASP.NET 4 01.06.2010 13:11