2014-04-23 79 views
0

我建立一個MVC應用程序,並在看翻譯下面簡單的SQL查詢
翻譯/ SQL轉換到實體框架/ LINQ

SELECT logon_count from application_users where username = 'username_to_find' 

我是新來的LINQ和Entity Framework。 我需要將logon_count結果存儲爲C#int,並且只能得到一個結果。爲了安全起見,應限制爲1。

以下類是使用ado.net從數據庫自動創建的,代表了application_users表。

public partial class application_users 
{ 
    public int idapplication_users { get; set; } 
    public string username { get; set; } 
    public string first_name { get; set; } 
    public string last_name { get; set; } 
    public Nullable<int> logon_count { get; set; } 
} 

我也有的DbContext

private thedbcontext dbcontext= new thedbcontext(); //In the controller 

public partial class mycontext : thedbcontext 
{ 
    public virtual DbSet<application_users> application_users { get; set; } 
} 

有人建議我如何能夠更好地利用LINQ /實體框架來執行上面的SQL和獲得的結果爲C#整數。

回答

3

假設thedbcontext是從的EntityFramework有效DbContext,那麼所有你需要做的是以下

var usernameToFind = "user1"; 
var db = new mycontext(); 
var logonCount = db.application_users.Count(t => t.username == usernameToFind); 

通常你mycontext類將從EF的DbContext類直接派生像這樣

public partial class mycontext : DbContext 
{ 
    public virtual DbSet<application_users> application_users { get; set; } 
} 
+0

我真的很想念sql。它更優越,簡單,優雅,簡潔,高效和高性能。我不知道爲什麼這個尷尬的包裝必須添加到不熟練的SQL開發人員。 – Manachi

1

像這樣:

string username = "test"; 
using(var dbContext = mycontext()) 
{ 

var LogonCount = (from application_users in dbContext.application_users 
        where application_users.username == username 
        select application_users).Count(); 
} 

或者您可以使用Richard發佈的lambda表達式。