我想用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