LINQ是否相当于@@ IDENTITY vs SCOPE_IDENTITY()?

时间:2010-08-17 22:00:54

标签: .net linq linq-to-sql

假设页面加载,我想要做的第一件事就是找到插入表格的最后一条记录的标识。

我不会插入任何记录或任何东西,我只是想盲目地找到最后一个id插入,可以使用LINQ完成吗?

4 个答案:

答案 0 :(得分:4)

加载的集合对存储(处理自动增量值)一无所知。如果您想知道已加载集合中的最高ID,可以使用聚合linq查询并选择max id。

或者您可以使用Linq-To-Sql运行存储过程并检索SCOPE_IDENTITY。

答案 1 :(得分:2)

您总是可以从Linq执行一段T-SQL来获取值:

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

然后从该输出中获取必要的值。

答案 2 :(得分:1)

您是否尝试过BLToolkit。它支持LINQ以及LINQ2SQL中缺少的许多其他有用的操作:即具有人脸的DML:)

关于你的问题:BLToolkit包含 InsertWithIdentity 方法

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();

答案 3 :(得分:-2)

大家好,我在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()

这为我工作!!!