[英]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.