繁体   English   中英

如何在c#中将sql语句转换为LINQ

[英]how to convert sql statement to LINQ in c#

如何转换到 LINQ:

from p in Product
join c in Catalog on c.Id equals p.CatalogId
join m in Manufacturer on m.Id equals p.ManufacturerId
where p.Active == 1
select new { Name = p.Name, CatalogId = p.CatalogId,
ManufacturerId =           p.ManufacturerId, CatalogName = c.Name,   
ManufacturerName = m.Name };

帮助!

不要试图从字面上翻译查询。 在 LINQ 中,您不需要加入实体,只要它们已经有关系,因为 LINQ 会自动使用关系来加入实体:

因此,假设您的Product有一个Catalog属性,而该属性又具有Manufacturer属性,您可以编写没有连接的 LINQ,如下所示:

from p in Product
where p.Active == 1
select new { 
  Name = p.Name, 
  CatalogId = p.CatalogId,
  ManufacturerId = p.ManufacturerId, 
  CatalogName = p.Catalog.Name,   
  ManufacturerName = p.Manufacturer.Name };

解决办法是在第一次join后建立一个临时结果,作为第二次join的第一个序列

var result = product.Where(p => p.Active == 1),  // 1st sequence
    .join(catalog,          // 2nd sequence
        p => p.CatalogId,   // selector from 1st sequence
        c => c.Id,          // selector from 2nd sequence
        (p, c) =>           // take the elements where the selector match
            new {ManufacturerId = p.ManufacturerId,
                 Name = p.Name,
                 CatalogId =  p.CatalogId,
                 CatalogName = c.Name})   // result is 1st sequence next join
    .Join(Manufacturer,                   // 2nd sequence 2nd join
        r => r.ManufacturerId,            // selector result 1st join
        m => m.Id,                        // selector 2nd sequence 2nd join
        (r, m) =>                         // two elements where the selectors match
            new {Name = r.Name,           // build the result object
                 CatalogId = r.CatalogId,
                 ManufacturerId = r.ManufacturerId,
                 CatalogName = r.CatalogName,
                 ManumfacturerName = r.Name});

一块蛋糕^^

只需调用 IQueryable 的 ToString() 方法将返回 SQL 表示。

var query = from p in Product
            join c in Catalog on c.Id equals p.CatalogId
            join m in Manufacturer on m.Id equals p.ManufacturerId
            where p.Active == 1;
string sqlQuery = query.ToString(); //SQL Query Saved Here

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM