LINQ:返回变量值?

时间:2010-12-10 10:19:49

标签: c# linq

我有这段代码:

    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

那么,该怎么办? 我知道,一个可能的选择是编写一个类并返回一个列表,但我有这样的查询,如果我能有一个通用的解决方案,我会很高兴...

6 个答案:

答案 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>