我想用LINQ替換我的原始SQL。這裏是我的代碼:如何從原始SQL重寫爲LINQ?
myController的:
using MyProject.Models;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
namespace MyProject.Controllers
{
public class MyController : ApiController
{
[HttpGet]
public List<User> UserData()
{
var selUserData = "SELECT * FROM mydb.User";
using (var ctx = new ApplicationDbContext())
{
var userData = ctx.Database.SqlQuery<User>(selUserData).ToList();
return userData;
}
}
public class User
{
public int Id { get; set; }
public string Username { get; set; }
public string Password { get; set; }
}
}
}
Web.config文件:
<connectionStrings>
<add name="MyEntities" providerName="MySql.Data.MySqlClient" connectionString="server=127.0.0.1;port=3306;database=,mydb;uid=root;password=mypass" />
</connectionStrings>
ApplicationDBContext.cs:
using MySql.Data.Entity;
using System.Data.Entity;
namespace MyProject.Models
{
[DbConfigurationType(typeof(MySqlEFConfiguration))]
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext() : base(nameOrConnectionString: "MyEntities") { }
}
}
我一直在尋找一些日子網頁嘗試找到一個解決方案,但沒有運氣。我的代碼應該看起來像var userData = ctx...
這只是添加了幾行LINQ語法,或者我做的全部錯了嗎?我閱讀了有關LINQ不完全兼容MySQL的內容。如果我使用的是MSSQL,如果我使用的是MySQL,那麼我的代碼會是什麼樣子?
編輯:
UserDAL.cs:
public class UserDAL
{
public static List<User> UserData()
{
using (var ctx = new MyEntities())
{
var userData = ctx.Users.ToList();
return userData;
}
}
}
MyModel.Context.cs(自動生成的代碼):
[DbConfigurationType(typeof(MySqlEFConfiguration))]
public partial class MyEntities : DbContext
{
public SloRideEntities()
: base("name=MyEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<User> Users { get; set; }
public virtual DbSet<Ride> Rides { get; set; }
}
User.cs(自動生成的代碼):
public partial class User
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public User()
{
this.Rides = new HashSet<Ride>();
}
public long Id { get; set; }
public string Username { get; set; }
public string Password { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Ride> Rides { get; set; }
}
LINQ是一種語言技術 - 如果你的意思是「不與MySQL完全兼容」你不談論LINQ,但LINQ提供程序。 – TomTom
'不完全兼容'我的意思是需要額外的軟件包才能正常工作。 – Tomo
也沒有意義,因爲標準.NET中的ONLY包是LINQ to Objects(針對內存中的對象)。實體框架也是一個外部包。 – TomTom