2010-12-10 74 views
0

我有这样的代码:LINQ:返回var-value?

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

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

+0

可能匿名的对象不是序列化的,但是你想怎样安全地消耗你的返回值不知道的返回类型?你不能迭代它们并说foreach(列表中的var项){Console.WriteLine(item。????)} – 2010-12-10 10:35:12

+0

[LINQ to SQL:Return anonymous type?]可能重复(http://stackoverflow.com /问题/ 534690/LINQ到SQL回报匿名型) – nawfal 2013-02-12 17:45:35

回答

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

你的查询返回一个IQueryable;您需要使用ToList运算符将查询结果转换为列表<>类型,使用ToList运算符

1

Linq查询返回的值是IQueryable类型,要将其转换为List,您必须创建一个List新的List将对象传递给构造函数。

试试这个:

var result = from pm in dc.PrivateMessages ... 

List<object> query = new List<object>(result); 

...或使用ToList()扩展方法在其他答复建议。

-1

你也可以使用“var query”,而不是“List<object> query”作为返回的其实并不是一个真正的List<object>

0

你returing查询变量,因为LINQ的是基于递延执行概念,即存储在查询查询变量不会eveluated直到你调用这个像一些迭代器(ToList(),ToDictionary(),指定者(),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; 

     } 
    } 
0

你想使用延迟执行还是想立即运行查询?如果你想推迟执行返回一个IQueryable或IEnumerable,否则返回一个List。

如果推迟小心了“使用Flirt4dateDBDataContext dc = new Flirt4dateDBDataContext()”块,查询执行前,可能处置的DataContext。已创建并送回给调用者