将SQL查询转换为C#中的LINQ或lambda表达式,并在EF Core中使用

时间:2017-07-18 07:53:36

标签: c# sql sql-server linq lambda

我有3张桌子 Tbl_City,Tbl_GroupCities,Tbl_CtrCar。
我想将此SQL查询转换为C#

中的LINQ或lambda表达式
declare @fk_group uniqueidentifier
SELECT @fk_group= FK_Group 
FROM dbo.Tbl_User
WHERE UserName='meysam'

SELECT dbo.Tbl_City.ID_City, dbo.Tbl_City.Name_City,COUNT( dbo.Tbl_CtrCar.Cur_year)
FROM dbo.Tbl_City 
INNER JOIN dbo.Tbl_CtrCar ON dbo.Tbl_City.ID_City = dbo.Tbl_CtrCar.FK_City
WHERE ID_City IN (SELECT FK_City 
                  FROM dbo.Tbl_GroupCities
                  WHERE Active=1 AND ID_Group=@fk_group)
GROUP BY ID_City , Name_City 

我尝试了但是它不起作用

 var model = _TblUser.FirstOrDefault(x => x.UserName == "sampleUserName");
    var q = _TblGroupCities.Where(x => x.IdGroup == model.FkGroup && x.Active == true);
    var sample2 =
        (from x in _TblCity
         join a in _TblGroupCities on x.IdCity equals a.FkCity
         where a.Active == true && a.IdGroup == model.FkGroup
         select new
         {
             x.IdCity,
             x.NameCity
         }).ToList();

2 个答案:

答案 0 :(得分:2)

请查看here您查询中的功能尚未实现。 GroupBy和我认为subselects也会做

SELECT * FROM TableName

在内存中,它将为每个行执行一个新的SQL查询,甚至每行。

最好为此目的使用RawSql方法。

但如果您真的想学习LINQ并转换SQL,请查看LINQPad

答案 1 :(得分:0)

此问题已完成。我发现了我的问题,我不明白使用两个连接并在Linq中使用group by

我使用此linq作为解决方案并运行

    var model = _TblUser.SingleOrDefault(x => x.UserName == type.UserName);

        var q = _TblGroupCities.Where(x => x.IdGroup == model.FkGroup && x.Active == true);
        tblCityViewModel = new List<MohasebKhodro.ViewModels.TblCityViewModel>();

        var sample2 =
            (from x in _TblCity
             join a in _TblGroupCities on x.IdCity equals a.FkCity
             where a.Active == true && a.IdGroup == model.FkGroup
             select new
             {
                 x.IdCity,
                 x.NameCity
             }).ToList();


        foreach (var item in sample2)
        {
            var er = _TblCtrCar.Where(x => x.FkCity == item.IdCity).Max(x => x.CurYear);
            tblCityViewModel.Add(new MohasebKhodro.ViewModels.TblCityViewModel
            {
                IdCity = item.IdCity,
                NameCity = item.NameCity,
                MaxCurrentYear = Convert.ToString(er)
            });
        }