C# 实体框架-检查foreach/更新查询
我有以下疑问:C# 实体框架-检查foreach/更新查询,c#,entity-framework,linq-to-sql,lambda,C#,Entity Framework,Linq To Sql,Lambda,我有以下疑问: db.Context.SomeTable .Where(x => x.abc == someAbc && x.zyx == someZyx) .ForEach(y => { y.AuditId = newAuditId; y.TimeStamp = newTimestamp; }); 我想从ForEach语句中获取实际的SQL查询 如果我只执行以下操作: var selectQuery
db.Context.SomeTable
.Where(x => x.abc == someAbc && x.zyx == someZyx)
.ForEach(y =>
{
y.AuditId = newAuditId;
y.TimeStamp = newTimestamp;
});
我想从ForEach
语句中获取实际的SQL查询
如果我只执行以下操作:
var selectQuery = db.Context.SomeTable
.Where(x => x.abc == someAbc && x.zyx == someZyx);
我可以从selectQuery变量获取以下查询:
SELECT
[Extent1].[abc] AS [abc],
[Extent1].[zyx] AS [zyx]
--skipping some [Extent1]. statements for simplicity here
FROM
[dbo].[SomeTable] AS [Extent1]
WHERE
([Extent1].[abc] = @p__linq__0) AND ([Extent1].[zyx] = @p__linq__1)
然后我可以在VisualStudio之外运行它,分析它的性能,等等
如何对
ForEach
语句执行此操作?ForEach
执行并从服务器获取数据<代码>ForEach未转换为SQL。它只需对您刚刚编写的实体执行Linq:
var selectQuery = db.Context.SomeTable
.Where(x => x.abc == someAbc && x.zyx == someZyx);
这将生成您在问题中使用的SQL 看看这个设置
我在过去使用过这个,但是当您得到查询时,它已经被执行了。这可能对您有帮助,也可能没有帮助。如前所述,
ForEach
不会转换为SQL语句。如果要在.NET中进行这些更改并将其保存回数据库,则需要调用以更新数据源:
var items = db.Context.SomeTable
.Where(x => x.abc == someAbc && x.zyx == someZyx);
foreach(var item in items)
{
item.AuditId = newAuditId;
item.TimeStamp = newTimestamp;
}
db.Context.SaveChanges();
我想你忘了在“foreach”之前提到“ToList()”。您需要一个数组或列表来执行循环 这是我的例子,
public HomePageBannerModel GetBannerImage()
{
var banner = new HomePageBannerModel();
_jBannerRepository.Table.Where(x => x.BannerType == BannerTypes.Home).ToList()
.ForEach(y =>
{
switch (y.Size)
{
case "M":
banner.Md = _pictureService.GetPictureUrl(y.PictureId);
break;
case "S":
banner.Sm = _pictureService.GetPictureUrl(y.PictureId);
break;
default:
banner.Lg = _pictureService.GetPictureUrl(y.PictureId);
break;
}
});
return banner;
}
有没有关于如何使用这个的例子?谢谢