Есть ли в LINQ эквивалент @@ IDENTITY или SCOPE_IDENTITY ()? - PullRequest
2 голосов
/ 18 августа 2010

Скажите, что страница загружается, и первое, что я хочу сделать, это найти идентификатор последней записи, вставленной в таблицу.

Я не собираюсь вставлять какие-либо записи или что-то еще, я простохотите ослепнуть и найти последний вставленный идентификатор, это можно сделать с помощью LINQ?

Ответы [ 4 ]

4 голосов
/ 18 августа 2010

Загруженная коллекция ничего не знает о хранилище (которое обрабатывает значения автоинкремента). Если вы хотите узнать максимальный идентификатор в загруженной коллекции, вы можете использовать агрегированный запрос linq и выбрать максимальный идентификатор.

Или вы можете использовать Linq-To-Sql для запуска хранимой процедуры и получения SCOPE_IDENTITY.

2 голосов
/ 18 августа 2010

Вы всегда можете выполнить фрагмент T-SQL из Linq, чтобы получить значения:

SELECT 
    name, 
    OBJECT_NAME(OBJECT_ID) 'Table name',
    ISNULL(last_value, -1) 'Last Value'
FROM 
    sys.identity_columns 

, а затем получить необходимые значения из этого вывода.

1 голос
/ 18 августа 2010

Вы пробовали BLToolkit . Он поддерживает LINQ, а также многие другие полезные операции, которые отсутствуют в LINQ2SQL: т.е. DML с человеческим лицом:)

По вашему вопросу: BLToolkit содержит InsertWithIdentity method

var value = db.Employee.InsertWithIdentity(() => new Northwind.Employee
{
    FirstName = "John",
    LastName  = "Shepard",
    Title     = "Spectre",
    HireDate  = Sql.CurrentTimestamp
});

или

var value =
    db
    .Into(db.Employee)
        .Value(e => e.FirstName, "John")
        .Value(e => e.LastName,  "Shepard")
        .Value(e => e.Title,     () => "Spectre")
        .Value(e => e.HireDate,  () => Sql.CurrentTimestamp)
    .InsertWithIdentity();
0 голосов

Привет, у меня есть решение на linq whit vb.net!

        Dim Reg as new Consult
        Reg.Nombre = TxName.Text
        Reg.Edad = TxYears.Text
        Reg.Pulso = TxPulse.Text
        Reg.Tension = TxTens.Text
        Reg.Peso = TxKg.Text
        Db.Consulta.InsertOnSubmit(Reg)
        Db.SubmitChanges()
        MsgBox("You have created a New Consult #" & Reg.ConsultaId)

        DialogResult = Windows.Forms.DialogResult.OK
        Me.Close()

ЭТО РАБОТА ДЛЯ МЕНЯ !!!

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