我在从 LINQ 查询加载数据 GridView 时遇到错误。
我正在查询以从 3 个表加载数据,但我总是收到“无法将 List 隐式转换为 IQueryable。我知道存在转换,但无法弄清楚。
所以,首先,我在我的表单中添加了一个类,它的属性是我希望连接的每一行都具有的值:
public class ListofModuleUser
{
public string User { get; set; }
public string Modulo { get; set; }
public bool Read { get; set; }
public bool Write { get; set; }
public bool Create { get; set; }
public bool Delete { get; set; }
public bool Navigate { get; set; }
}
其次,我正在进行查询并希望返回一个列表以填充我的数据 GridView :
public IQueryable<ListofModuleUser> LoadData()
{
var ctx = new JEntities();
var fillusers = (from mu in ctx.tblModuloUsers.AsQueryable()
join u in ctx.tblUsers on mu.UserID equals u.UserID
join m in ctx.tblModuloes on mu.ModuloID equals m.ModuloID
select new
{
User = u.Username,
Modulo = m.Moduloname,
Read = mu.CanRead,
Write = mu.CanWrite,
Create = mu.CanCreate,
Delete = mu.CanDelete,
Navigate = mu.CanNavigate
}).ToList();
return fillusers; //---> Obviously the error occours here!
}
然后,在 Load 事件中,我获取我的列表并填充我的数据 GridView :
private void MapUserToModulos_List_Load(object sender, EventArgs e)
{
usersmodules_datagrid.DataSource = LoadData();
}
谁能帮我弄清楚我必须使用哪个 Cast,因为我已经尝试了所有可能的转换(ToList、Array、AsEnumerable、AsQueryable...)
最佳答案
您的方法声称返回一个 IQueryable<T>
:
public IQueryable<ListofModuleUser> LoadData()
但是您正试图返回 List<T>
:
var fillusers = ....ToList();
return fillusers;
如果要返回一个列表,改变方法的返回类型:
public IList<ListofModuleUser> LoadData()
或者,如果你想返回一个 IQueryable
, 删除 .ToList()
来自您的 LINQ 查询。
另外,你的返回类型是一个特定的类:
ListofModuleUser
但是你正在查询一个匿名对象:
select new
{
User = u.Username,
Modulo = m.Moduloname,
Read = mu.CanRead,
Write = mu.CanWrite,
Create = mu.CanCreate,
Delete = mu.CanDelete,
Navigate = mu.CanNavigate
}
您必须查询到正确的类型:
select new ListofModuleUser
{
User = u.Username,
Modulo = m.Moduloname,
Read = mu.CanRead,
Write = mu.CanWrite,
Create = mu.CanCreate,
Delete = mu.CanDelete,
Navigate = mu.CanNavigate
}
旁注:ListofModuleUser
对于单个对象来说是一个非常不直观的名称。您正在创建的基本上称为“模块用户列表列表”。也许这个类应该叫ModuleUser
?
关于c# - 从 LINQ to SQL 查询加载 DataGridView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50657768/