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

本文关键字:插入 IEnumerable 集合 对象 Linq 使用 | 更新日期: 2023-09-27 17:50:58

你好,我有以下类

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语句中,我得到的情报错误说

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

请告诉我如何纠正这个错误。由于

使用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,                                 
                     }
                   }
            });

如果需要其他组织(例如按name或其他属性分组),则需要在期望的输出中提供更多细节

这段代码;

            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 } }

使用静态初始化器将单例对象放入集合中。

您必须在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,                                 
                                     }
                                   }
                            });