使用Linq在对象中插入IEnumerable集合

时间:2014-03-19 22:09:30

标签: c# linq lambda

您好我有以下课程

public class bizOrg
{
    public string name { get; set; }
    public int p_id { get; set; }
    public virtual product product { get; set; }
    public IEnumerable<newStructure> newStructure { get; set; }
}

并且

public class newStructure
{
    public int project_id { get; set; }
    public string a_name { get; set; }
    public string a_phone { get; set; }
    public virtual product product { get; set; }
}

我有以下Linq声明

 var acc = (from c in db.p_account
                            where c.p_id == id
                            select new bizOrg
                            {
                                p_id = c.product.id,
                                name = c.name,
                               newStructure=  new newStructure
                                  {    
                                    a_name = c.name,
                                    a_phone = c.phone,                                 
                                   }
                            });

在上面的linq语句中,我得到了intelicense错误说

Cannot implicitly convert type newStructure to 'System.Collections.Generic.IEnumerable<newStructure>' . An explicit conversion exists

请告诉我如何更正此错误。谢谢

3 个答案:

答案 0 :(得分:2)

newStructure需要是一个集合。如果您只有一个平面列表(意味着底层集合只有一个项目),那么您可以这样做:

 var acc = (from c in db.p_account
            where c.p_id == id
            select new bizOrg
            {
                p_id = c.product.id,
                name = c.name,
               newStructure=  new List<newStructure>
                  { new newStructure()   
                    {  
                       a_name = c.name,
                       a_phone = c.phone,                                 
                     }
                   }
            });

如果需要其他组织(例如name或其他属性组),那么您需要在所需的输出中提供更多详细信息。

答案 1 :(得分:0)

这段代码;

            select new bizOrg
                        {
                            p_id = c.product.id,
                            name = c.name,
                           newStructure=  new newStructure
                              {    
                                a_name = c.name,
                                a_phone = c.phone,                                 
                               }
                        });

创建单个newStructure实例并尝试将其分配给IEnumerable<newStructure>类型的属性而不是;

    newStructure = new { new newStructure() { a_name = c.name, a_phone = c.phone } }

使用静态初始化程序将您的单例放入集合中。

答案 2 :(得分:0)

您必须在linq语句中创建一个新的IEnumerable<newStructure>。它需要一组对象,您只需要分配单个对象而不是单个对象的集合。

var acc = (from c in db.p_account
                            where c.p_id == id
                            select new bizOrg
                            {
                                p_id = c.product.id,
                                name = c.name,
                               newStructure=  new List<newStructure>{
                                    new newStructure{    
                                      a_name = c.name,
                                      a_phone = c.phone,                                 
                                     }
                                   }
                            });