Можно ли перевести мой SQL-запрос в LINQ?
Привет! Я новичок в LINQ C#. Можно ли перевести мой SQL-запрос в LINQ?
Кто-нибудь может мне помочь, пожалуйста?
select Max(a.CreatedDate), Max(b.ModifiedDate), Count(*) from TableA AS a join TableB AS b on a.Id = b.Id where a.UserId = 1;
a.) TableA - UserID (PK, int, not null, (but NOT UNIQUE)) - Id (PK,FK, unique) - CreatedDate (not null) b.) TableB - Id (PK, unique) - ModifiedDate (null) There is foreign key on TableA.Id -> TableB.Id And the last condition is that TableA.UserId = 1
Мне нужно количество строк в результате этого запроса, MAX CreatedDate и MAX ModifiedDate.
Что я уже пробовал:
------------------------------------------------------------------------------------
С#
Я пытался:
var result = (from b in TabeleB join a in TableA on a.Id equals b.Id where (a.UserId == 1) select new { a.CreatedDate, b.ModifiedDate }) .ToList(); var maxModifiedDate = result.Max(x=> x.ModifiedDate); var maxCreatedDate = result.Max(x=> x.CreatedDate); var count = result.Count();
Но мне не нужен весь список, только три значения...
Мне нужен запрос LINQ получить максимальное значение1, значение2 Макс, кол-во строк в результате
Не могли бы вы мне помочь?
Sreekanth Mothukuru
Вы пробовали инструмент LINQPad?
Member 12681421
к сожалению у меня нет возможности скачать его
[no name]
Привет, не могли бы вы прислать свой вопрос немного подробнее?
Member 12681421
Я обновил вопрос с более подробной информацией
Beginner Luck
да
Member 12681421
Не могли бы вы дать мне какой-нибудь совет? Я добавил больше деталей в свой вопрос
Beginner Luck
http://www.sqltolinq.com/ и http://www.linqpad.net / у обоих есть учебник, как это сделать
0x01AA
Опять я :) UserID (PK, int, not null, (but NOT UNIQUE))
В случае, если вы действительно применяется главным сдерживающим фактором Prismary для ID пользователя в БД, то Идентификатор будет уникальным В случае, если этого не произошло, вы не должны описывать UserId как PK, иначе это становится очень запутанным.
Member 12681421
Я действительно применил ограничение первичного ключа для UserID в БД, но оно не уникально. вот и все.
Не берите в голову. Моя проблема заключается в том, чтобы написать запрос LINQ, который получает MAX of someValue, MAX of otherValue и Count (*) без получения всего списка (как я уже писал в вопросе)
0x01AA
Неужели как ПК в таблице?? или, может быть, только в TableUser?
Да, я пытаюсь решить этот LINQ, но я совершенно новичок в этом деле, и делаю это как отличное упражнение для меня :-)
Member 12681421
Действительно в таблице tablea :)
0x01AA
Да теперь я вижу как вы точно определяете PK в таблице :)
Так что пока у меня есть вот это:
from a in
(from a in db.TableA
where
a.UserId == 1
select new {
a.CreatedDate,
ModifiedDate = (DateTime?)a.TableB.ModifiedDate,
Dummy = "x"
})
group a by new { a.Dummy } into g
select new {
Created = (DateTime?)g.Max(p => p.CreatedDate),
Modified = (DateTime?)g.Max(p => p.ModifiedDate),
CountA = g.Count()
}
Нет-нет. Я сделал это не сам, я понизил Linqer, чтобы сделать это. Теперь я пытаюсь понять это :lol:
Я надеюсь, что это поможет
Member 12681421
большое спасибо за это!
Я также постараюсь понять его и, возможно, упростить :)
0x01AA
Я надеюсь, что это, наконец, правильно :)
from a in
(from a in TableA
join b in TableB on a.Id equals b.Id
where
a.UserId == 1
select new {
CreatedDate= a.CreatedDate,
ModifiedDate = (DateTime?)b.ModifiedDate,
Dummy = "x"
})
group a by new { a.Dummy } into g
select new {
Created = (DateTime?)g.Max(p => p.CreatedDate),
Modified = (DateTime?)g.Max(p => p.ModifiedDate),
CountA = g.Count()
}