Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用实体框架更新列表项的最有效方法_C#_Linq - Fatal编程技术网

C# 使用实体框架更新列表项的最有效方法

C# 使用实体框架更新列表项的最有效方法,c#,linq,C#,Linq,我们的用户将有一个列表集合,其中只有一个将标记为boolIsPrimary=true 我想写实体框架代码来更新它 大概是这样的: UPDATE dbo.EmailRecords SET IsPrimary = 1 WHERE EmailRecordId = @RecordId UPDATE dbo.EmailRecords SET IsPrimary = 0 WHERE EmailRecordId != @RecordId AND ParentRecordId = @Paren

我们的用户将有一个列表集合,其中只有一个将标记为boolIsPrimary=true

我想写实体框架代码来更新它

大概是这样的:

UPDATE dbo.EmailRecords 
SET IsPrimary = 1
WHERE EmailRecordId = @RecordId

UPDATE dbo.EmailRecords 
SET IsPrimary = 0 
WHERE EmailRecordId != @RecordId
     AND ParentRecordId = @ParentRecordId
foreach (var thisRecord in profile.EmailRecords)
{
    if (thisRecord.EmailRecordId == thisId)
    {
        thisRecord.IsPrimary = true;
    }
    else
    {
        thisRecord.IsPrimary = false;
    }
}

db.SaveChanges();
我的目标是:

public class EmailRecords
{
    public int EmailRecordId { get; set; }
    public int ParentRecordId { get; set; }
    public string EmailAddress { get; set; }
    public bool IsPrimary { get; set; }
}
如何使用实体框架实现这一点

我在考虑这样做:

UPDATE dbo.EmailRecords 
SET IsPrimary = 1
WHERE EmailRecordId = @RecordId

UPDATE dbo.EmailRecords 
SET IsPrimary = 0 
WHERE EmailRecordId != @RecordId
     AND ParentRecordId = @ParentRecordId
foreach (var thisRecord in profile.EmailRecords)
{
    if (thisRecord.EmailRecordId == thisId)
    {
        thisRecord.IsPrimary = true;
    }
    else
    {
        thisRecord.IsPrimary = false;
    }
}

db.SaveChanges();

有没有更干净的方法可以做到这一点?

使用您给出的示例模型

public class EmailRecords
{
    public int EmailRecordId { get; set; }
    public int ParentRecordId { get; set; }
    public string EmailAddress { get; set; }
    public bool IsPrimary { get; set; }
}
您可以使用LINQ和代码的组合来取消设置此主要行为

// Change this Int32 to match your @RecordId and @ParentRecordId.  Possibly parameterize this entire code snippet into a method.
Int32 recordIdToChange = 1;
Int32 parentRecordIdToChange = 1;

// Set the new primary.
EmailRecords emailRecordToSetToPrimary = profile.EmailRecords.Where(cs => cs.EmailRecordId == recordIdToChange).FirstOrDefault();
if (emailRecordToSetToPrimary != null){
   emailRecordToSetToPrimary.IsPrimary = true;
}

// Only unset those records whose id does not match the new primary AND is currently set as a primary.
List<EmailRecords> emailRecordsToUnsetFromPrimary = profile.EmailRecords.Where(cs => cs.EmailRecordId != recordIdToChange && cs.IsPrimary == true && cs.ParentRecordId == parentRecordIdToChange).ToList();
foreach (EmailRecords emailRecordToUnsetFromPrimary in emailRecordsToUnsetFromPrimary){
   emailRecordToUnsetFromPrimary.IsPrimary = false;
}

// Perform your save on the emailRecords list collection.

你是在寻找C代码,类似这样的东西吗

foreach(var record in profile.EmailRecords)
{
    record.IsPrimary = record.EmailRecordId == recordId;
}

您的.net列表集合的名称是什么?提供一些代码。您是指linq2sql还是实体框架?您好。所以你可能已经注意到在这个问题上有几张反对票了。原因是这个问题现在听起来像是这个想法,请给我编码。为了得到一个好的答案,你应该先尝试自己做一些事情,如果你遇到了具体的问题,然后在这里发布,所以这个问题听起来像是我有这个问题,试图解决它,但得到了这个错误/issueThis emailRecords.Wherecs=>cs.EmailRecordId==recordIdToChange.FirstOrDefault;还可以进一步简化为emailRecords.FirstOrDefaultcs=>cs.EmailRecordId==recordIdToChange;-不需要。首先在哪里,然后是。第一个或默认值之后。。。