2016-11-27 83 views
1

我有一个简单的gridview,我需要将其与用户列表绑定。如何在EF 6.0中调用原始SQL查询

在EF.5.0我可以简单的写

context.Users.Select(emp => new { Name = emp.FirstName, EmailId = emp.EmailId, UserId = emp.UserId }).ToList(); 

不过,我不EF6.0

看到.ToList()方法了,所以,我必须写使用ToAsyncList()异步查询。但是,不知道为什么下面的代码不工作,系统进入无尽的执行。

protected void Page_Load(object sender, EventArgs e) 
{ 
    var task = LoadData(); 
    task.Wait(); 
    GridView1.DataSource = task.Result; 
    GridView1.DataBind(); 
} 

private async Task<List<User>> LoadData() 
{ 
    List<User> users = null; 

    using (var context = new BlogEntities()) 
    { 
     users = await context.Database.SqlQuery<User>("Select * from User", new object[] { }).ToListAsync(); 
    } 

    return users; 
} 

任何人都可以请让我知道,我在做什么错在这里?

回答

1

使用此代码:

var users = context.Users.SqlQuery("SELECT * FROM dbo.User").ToList(); 
+0

谢谢。这一个工程。但如果我使用context.Database.SqlQuery(User.GetType(),“Select * from [User]”,new object [] {})。ToListAsync(),异步方法不起作用。我想知道为什么ToList()方法在这里不可用,它强制用户使用异步。 –

+0

'ToListAsync()'不起作用,或者执行需要很长时间? 关于这个方法有一个[topic](http://stackoverflow.com/questions/28543293/entity-framework-async-operation-takes-ten-times-as-long-to-complete) –