Как представить команду sql exist () в LINQ - PullRequest
1 голос
/ 20 октября 2010

У меня проблема с 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();

Ответы [ 3 ]

1 голос
/ 20 октября 2010

Вы могли бы сделать что-то вроде этого

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

Если вам нужна помощь со вставками или обновлениями в тексте данных, просто оставьте комментарий.

0 голосов
/ 20 октября 2010

В Entity Framework я обычно использую следующий метод расширения, чтобы достичь того, что вы хотите (см. Комментарий для примера).

/// <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;
    }
0 голосов
/ 20 октября 2010

Как то так? Так сколько попаданий в базу данных это вызывает? И с помощью linq это защищает меня больше для инъекций sql?

App_DAL.DataDataContext h = new App_DAL.DataDataContext(); if ((from emails in MyTables where emails.pk_email == email select emails.pk_email).Any()) { //Then update your data here var messenger = (from emails in MyTables where emails.pk_email == email select emails).Single(); messenger.last_login = DateTime.Now; messenger.is_logged_in = true; h.SubmitChanges(); } else { //Insert your data App_DAL.MyTable msg = new App_DAL.MyTable(); msg.pk_email = email; msg.is_logged_in = true; msg.last_login = DateTime.Now; h.MyTables.InsertOnSubmit(msg); h.SubmitChanges();</p> <p>}</p> <p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...