我有这段代码:
public static List<object> GetInbox(Guid id)
{
using (Flirt4dateDBDataContext dc = new Flirt4dateDBDataContext())
{
List<object> query = from pm in dc.PrivateMessages
join user in dc.Users
on pm.Sender equals user.UserID
select new
{
SenderName = user.Username
};
return query;
}
}
它不起作用。
错误1无法将类型'System.Linq.IQueryable'隐式转换为'System.Collections.Generic.List'。存在显式转换(您是否缺少演员?)O:\ Flirt4Date \ Flirt4Date \ DAL \ PrivateMessageHandling.cs 69 29 DAL
那么,该怎么办? 我知道,一个可能的选择是编写一个类并返回一个列表,但我有这样的查询,如果我能有一个通用的解决方案,我会很高兴...
答案 0 :(得分:4)
将您的代码更改为:
List<object> query = (from pm in dc.PrivateMessages
join user in dc.Users
on pm.Sender equals user.UserID
select new
{
SenderName = user.Username
}).ToList();
或将您的功能更改为:
public static IEnumerable<object> GetInbox(Guid id)
{
using (Flirt4dateDBDataContext dc = new Flirt4dateDBDataContext())
{
IEnumerable<object> query = from pm in dc.PrivateMessages
join user in dc.Users
on pm.Sender equals user.UserID
select new
{
SenderName = user.Username
};
return query;
}
}
答案 1 :(得分:1)
你的查询是返回IQueryable;您需要将查询结果转换为List&lt;&gt;使用ToList运算符
输入答案 2 :(得分:1)
Linq查询返回的值是IQueryable类型,要将其转换为List,您必须创建一个将对象传递给构造函数的新List。
试试这个:
var result = from pm in dc.PrivateMessages ...
List<object> query = new List<object>(result);
...或者使用其他响应中建议的ToList()扩展方法。
答案 3 :(得分:0)
你正在查询一个查询变量,因为Linq是基于被保护的执行概念,即存储在查询变量中的查询在你调用一些迭代器之前不会产生影响(ToList(),ToDictionary(),toArray() ,Count()等..)
所以chnage代码有点像这样工作
public static List<object> GetInbox(Guid id)
{
using (Flirt4dateDBDataContext dc = new Flirt4dateDBDataContext())
{
List<object> query = (from pm in dc.PrivateMessages
join user in dc.Users
on pm.Sender equals user.UserID
select new
{
SenderName = user.Username
}).ToList();
return query;
}
}
答案 4 :(得分:0)
您是想要使用延迟执行还是想立即运行查询?如果要延迟执行返回IQueryable或IEnumerable,则返回List。
如果延迟小心使用“using Flirt4dateDBDataContext dc = new Flirt4dateDBDataContext()
”块,它可能会在查询执行之前处理datacontext。
答案 5 :(得分:-1)
您还可以使用“var query
”代替“List<object> query
”,因为返回的内容实际上不是List<object>