我是LINQ的新手,但语法尚不完善。有人可以帮助我将这个SQL查询转换为一个LINQ语句,供我的C#项目使用。需要帮助将SQL左连接查询转换为LINQ格式
SELECT g.GalleryTitle, m.*
FROM Media AS m LEFT JOIN Galleries AS g ON m.GalleryID = g.GalleryID
WHERE m.MediaDate >= GETDATE() - 30
ORDER BY m.Views DESC
我是LINQ的新手,但语法尚不完善。有人可以帮助我将这个SQL查询转换为一个LINQ语句,供我的C#项目使用。需要帮助将SQL左连接查询转换为LINQ格式
SELECT g.GalleryTitle, m.*
FROM Media AS m LEFT JOIN Galleries AS g ON m.GalleryID = g.GalleryID
WHERE m.MediaDate >= GETDATE() - 30
ORDER BY m.Views DESC
from m in Db.Media
join g in Db.Galleries on m.GalleryID equals g.GalleryID into MediaGalleries
from mg in MediaGalleries.DefaultIfEmpty()
where m.MediaDate >= DateTime.Today.AddDays(-30)
orderby m.Views descending
select new
{
GalleryTitle = mg != null ? mg.GalleryTitle : null,
Media = m
};
谢谢!这使我朝着正确的方向前进。 – Maddhacker24
我不能现在就测试它,但它应该是这样的:
var result = Media.GroupJoin(Galleries, m => m.GalleryID, g => g.GalleryID,
(m, g) => new {m, g})
.SelectMany(mg => mg.g.DefaultIfEmpty(),
(m,g) => new { Media = m.m, GalleryTitle = g != null ? g.GalleryTitle : default(string) })
.OrderByDescending(m => m.Media.Views).ToList();
你失去了'GalleryTitles'。 –
你是对的,修好了,谢谢 –
但它不是左连接。 –
var result = from m in Media
join g in Galleries
on m.GalleryId equals g.GalleryId
into gJoinData
from gJoinRecord in gJoinData.DefaultIfEmpty()
where m.MediaDate.CompareTo(DateTime.Today.AddDays(-30.0)) >= 0
orderby m.Views descending
select new
{
M_Record = m,
GalleryTitle = gJoinRecord.GalleryTitle
};
http://msdn.microsoft.com/en-us /library/vstudio/bb397895(v=vs.100).aspx – user959729
您必须为具体查询显示您的实体对象模型。 –