mvc3将匿名类型转换为可匿名类型的最佳方法

时间:2014-02-26 18:13:40

标签: asp.net-mvc-3 ienumerable anonymous-types

我有一个模型使用IEnumerable在视图中使用foreach语句返回多行。问题是我正在使用Join,因为我需要来自2个不同表的数据,这些数据将不可数变为匿名类型并导致错误;我能解决这个问题的最好方法是什么?

 var Ieposts = (from t in db.Threadposts join p in db.profiles on t.profileID equals p.profileID  where t.threadID == id  select new
                    {
                       firstname = p.firstname,
                        lastname = p.lastname,
                        articles = p.articlecount,
                       city = p.city,
                       state = p.state,
                       post = t.post
                    }).ToList();

我只是拿出了我需要的字段,因为这会提高数据库性能。任何建议都会很棒

1 个答案:

答案 0 :(得分:1)

我认为你真的需要更多地了解Entity Framework和Linq。

联接不创建匿名类型,从匿名类型获取可枚举也没有任何问题。只需从查询中调用.AsEnumerable()即可。

然而,我怀疑这不是你想要做的。你真正想要的是具体的返回类型。在这种情况下,您可能想为此创建一个类型:

public class IEPost {
    public string FirstName {get;set;}
    public string LastName {get;set;}
    public int Articles {get;set;}
    public string City {get;set;} 
    public string State {get;set:}
    public Post Post {get;set;}
}

然后你就像这样创建你的查询(注意“新的IEPost”部分):

var Ieposts = (from t in db.Threadposts 
               join p in db.profiles on t.profileID equals p.profileID
               where t.threadID == id  select new IEPost
               {
                   FirstName = p.firstname,
                   LastName = p.lastname,
                   Articles = p.articlecount,
                   City = p.city,
                   State = p.state,
                   Post = t.post
                }).ToList();