如何返回IEnumerable<>我的定制模型?

时间:2015-01-01 08:17:51

标签: c# asp.net linq ienumerable

我正在使用EF6,我的一个型号名称是tblAttachLabel。我有自定义的名称为AttachLabel的模型。我需要一个自定义模型的IEnumerable,它填充了tblAttachLabel模型。它很容易返回

IEnumerable<tblAttachLabel> 

从我的功能,但我需要返回

IEnumerable<AttachLabel>

所以我做了这段代码:

public static IEnumerable<AttachLabel> GetAttachLabel()
    {            
        Entities db = new Entities();
        var x = from al in db.tblAttachLabels select al;

        List<AttachLabel> temp = new List<AttachLabel>();
        IEnumerable<AttachLabel> _attachLabel;
        foreach (var item in x)
        {
            AttachLabel a = new AttachLabel()
            {
                ID = item.ID,
                Text = item.Text
            };
            temp.Add(a);
        }
        _attachLabel = temp;

        return _attachLabel;
    }

但我知道当我使用List for temp时,查询将会执行,但我不想这样做。那我怎么能返回一个IEnumerable?

4 个答案:

答案 0 :(得分:2)

请改为尝试:

public static IEnumerable<AttachLabel> GetAttachLabel()
{
    Entities db = new Entities();

    return from item in db.tblAttachLabels select new AttachLabel()
    {
        ID = item.ID,
        Text = item.Text
    };
}

答案 1 :(得分:1)

@ haim770答案的另一个可能性和替代方案是使用yield关键字的循环:

  

在语句中使用yield关键字时,表明它出现的方法,运算符或get访问器是迭代器。使用yield来定义迭代器时,在为自定义集合类型实现IEnumerable和IEnumerator模式时,不需要显式的额外类(保存枚举状态的类,请参阅IEnumerator中的示例)。

public static IEnumerable<AttachLabel> GetAttachLabel()
{               
    using(Entities db = new Entities())
    {
        foreach (var item in db.tblAttachLabels)
        {
            AttachLabel a = new AttachLabel()
            {
                ID = item.ID,
                Text = item.Text
            };
            yield return a;
        }
    }
    yield break;
}

您的上下文也应该被处理,所以我添加了using声明。

并且不需要:

from al in db.tblAttachLabels select al;

因为它只返回与db.tblAttachLabels相同的集合。

答案 2 :(得分:1)

public static IEnumerable<AttachLabel> GetAttachLabel()
{
    Entities db = new Entities();
    var items = from al in db.tblAttachLabels select al;

    return items.Select(new AttachLabel()
    {
       ID = item.ID,
       Text = item.Text
    });

}

答案 3 :(得分:0)

其中一个,取决于您是否更喜欢lambda表达式:

public static IEnumerable<AttachLabel> GetAttachLabel()
{
    using (var db = new Entities())
    {
        return db.tblAttachLabels.Select(item => new AttachLabel
        {
            ID = item.ID,
            Text = item.Text
        });
    }
}

与否:

public static IEnumerable<AttachLabel> GetAttachLabel()
{
    using (var db = new Entities())
    {
        return from item in db.tblAttachLabels
                select new AttachLabel
                {
                    ID = item.ID,
                    Text = item.Text
                };
    }
}