C# 如何在LINQ中表示sql exists()命令

C# 如何在LINQ中表示sql exists()命令,c#,linq-to-sql,C#,Linq To Sql,我有一个反复使用的SQL问题,但现在我需要在LINQ中做更多的事情。我该怎么做?是否有一个站点可以将sql转换为linq conn.Open(); SqlCommand command = new SqlCommand(); command.Connection = conn; //query command.Parameters.Add(new SqlParameter("@email", email)); //else command.CommandText = "if exists(SE

我有一个反复使用的SQL问题,但现在我需要在LINQ中做更多的事情。我该怎么做?是否有一个站点可以将sql转换为linq

conn.Open();
SqlCommand command = new SqlCommand();
command.Connection = conn;
//query
command.Parameters.Add(new SqlParameter("@email", email));

//else
command.CommandText = "if exists(SELECT pk_email FROM MyTable WHERE pk_email = @email) begin " +
                "UPDATE MyTable SET last_login = getdate(), is_logged_in = 'true' WHERE pk_email = @email; " +
                "end else begin " +
                "INSERT INTO MyTable (pk_email, last_login, is_logged_in) VALUES (@email , getdate(), 'true'); " +
                "end";
command.ExecuteNonQuery();

你可以这样做

if(From emails In MyTable Where emails.pk_email == email).Any) {
    'Then update your data here
}
else {
     'Insert your data
}

如果您需要有关数据上下文的插入或更新的帮助,只需删除注释。

您可以这样做

if(From emails In MyTable Where emails.pk_email == email).Any) {
    'Then update your data here
}
else {
     'Insert your data
}

如果您需要有关数据上下文的插入或更新的帮助,请删除注释。

类似的内容?那么这会对数据库造成多少次点击?通过使用linq,它是否能为sql注入提供更多的保护


App_DAL.datacontext h=新App_DAL.datacontext();
if((来自MyTables中的电子邮件,其中emails.pk_email==电子邮件选择emails.pk_email).Any()){
//然后在这里更新您的数据
var messenger=(来自MyTables中的电子邮件,其中emails.pk_email==电子邮件选择电子邮件)。Single();
messenger.last_login=DateTime.Now;
messenger.is_logged_in=真;
h、 提交更改();
}
其他的
{
//插入您的数据
App_DAL.MyTable msg=新App_DAL.MyTable();
msg.pk_email=电子邮件;
msg.is_logged_in=true;
msg.last_login=DateTime.Now;
h、 MyTables.InsertOnSubmit(msg);
h、 提交更改()

}


像这样的东西?那么这会对数据库造成多少次点击?通过使用linq,它是否能为sql注入提供更多的保护


App_DAL.datacontext h=新App_DAL.datacontext();
if((来自MyTables中的电子邮件,其中emails.pk_email==电子邮件选择emails.pk_email).Any()){
//然后在这里更新您的数据
var messenger=(来自MyTables中的电子邮件,其中emails.pk_email==电子邮件选择电子邮件)。Single();
messenger.last_login=DateTime.Now;
messenger.is_logged_in=真;
h、 提交更改();
}
其他的
{
//插入您的数据
App_DAL.MyTable msg=新App_DAL.MyTable();
msg.pk_email=电子邮件;
msg.is_logged_in=true;
msg.last_login=DateTime.Now;
h、 MyTables.InsertOnSubmit(msg);
h、 提交更改()

}


在实体框架中,我通常使用以下扩展方法来实现您想要的功能(请参见注释中的示例)


在EntityFramework中,我通常使用以下扩展方法来实现您想要的(请参见注释中的示例)


这对数据库的影响比我写的更大吗?我知道做事情的方法不止一种。使用sqlcommand看起来更干净,但哪一个是最好的?现在这对数据库的影响比我写的更大吗?我知道做事情的方法不止一种。使用sqlcommand看起来更干净,但哪一个是最好的?这看起来不错,但我是个新手,无法理解它。我来自一个典型的asp背景,当变量和数据类型可以有额外的“”时,我就迷路了。不过现在读一下。是的,它有点抽象,因为它是为处理任何你想使用的实体Framwork实体而创建的。一旦你掌握了泛型和高阶函数的诀窍,你会发现这很简单:)。这看起来不错,但我是个新手,不懂。我来自一个典型的asp背景,当变量和数据类型可以有额外的“”时,我就迷路了。不过现在读一下。是的,它有点抽象,因为它是为处理任何你想使用的实体Framwork实体而创建的。一旦你掌握了泛型和高阶函数的诀窍,你会发现这很简单:)。
/// <summary>
    /// Updates and entity and save it to the database.
    /// If it doesn't exist it creates a new entity and saves it to the database.
    /// <example>
    ///     <code>
    ///         //Updates or inserts a row into Account. The inserted/updated row will have its AccountNumber set to "17".
    ///         var account = db.Accounts.InsertOrUpdate(a => a.ID == id, a => a.AccountNumber = "17");
    ///     </code>
    /// </example>
    /// </summary>
    /// <typeparam name="TEntity"></typeparam>
    /// <param name="allEntities"></param>
    /// <param name="entityFilter"></param>
    /// <param name="propertySetter"></param>
    /// <returns></returns>
    public static TEntity InsertOrUpdate<TEntity>(this ObjectSet<TEntity> allEntities, Func<TEntity, bool> entityFilter,
                                                  Action<TEntity> propertySetter) where TEntity : class, new()
    {
        //First we use the entityValueMapper to search for an existing entity.
        var entity = allEntities.Where(entityFilter).FirstOrDefault();
        if (entity == null)
        {
            entity = new TEntity();
            allEntities.AddObject(entity);
        }
        propertySetter(entity);
        allEntities.Context.SaveChanges();
        return entity;
    }