在c#中使用相同类的对象创建属性

时间:2013-06-18 06:36:14

标签: c# c#-4.0

我正在尝试的是以下内容:

public class AHME
{
    public string elementName { get; set; }
    public long? elementID { get; set; }
    public AHME[] children { get; set; }

    public static AHME[] GetAHME()
    {
        var listS = new List<AHME>();

        using (var db = new DBEntities())
        {
            AHME sList = db.Stnd.Select(s => new AHME
            {
                elementID = s.ID,
                elementName = s.Name,
            }).ToList();

            listS.Add(sList);

            var listT = new List<AHME>();

            using (var db = new DBEntities())
            {
                AHME tList = db.Tr.Join(db.Us, t => t.ID, u => u.ID, (t, u) => new AHME
                {
                    elementID = t.ID,
                    elementName = u.FirstNames + " " + u.LastName,
                    children=listS.ToArray(),
                });

                listT.Add(tList).ToList();
            }

            return listT.ToArray();
        }
    }
}

但我收到的错误如下:

  

无法将类型“System.Collections.Generic.List<LSB.HM.AHME>”隐式转换为“LSB.HM.AHME

     

无法将类型“System.Linq.IQueryable<LSB.HM.AHME>”隐式转换为“LSB.HM.AHME”。存在显式转换(您是否错过了演员?)

此外,对于“AHME sList”如果我可以使用类似var sList的var类型, 然后它的投掷错误:

  

<LSB.HM.AHME>.Add有一些无效的争论

3 个答案:

答案 0 :(得分:5)

您正尝试将List<AHME>对象分配给AHME变量。试试这样:

        var sList = db.Stnd.Select(s => new AHME
        {
            elementID = s.ID,
            elementName = s.Name,
        }).ToList();

Join行相同。

答案 1 :(得分:4)

问题在于:

        AHME sList = db.Stnd.Select(s => new AHME
        {
            elementID = s.ID,
            elementName = s.Name,
        }).ToList();

您无法将IList<T>投射到T

最简单的解决方案是使用var

        var sList = db.Stnd.Select(s => new AHME
        {
            elementID = s.ID,
            elementName = s.Name,
        }).ToList();

答案 2 :(得分:0)

感谢所有人和Writwick。

我使用foreach循环遍历var sList并在ListS中的sList中添加项目,从概念上讲我认为它应该是这样的,因为sList包含对象列表并且需要逐个添加列表。