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;
        }

有没有关于如何使用这个的例子?谢谢