当前位置:  开发笔记 > 编程语言 > 正文

实现IEnumerable

如何解决《实现IEnumerable》经验,为你挑选了1个好方法。

我正在使用LINQ,并且很难理解如何在查询跨表时使LINQ中的新"域模型"类工作.我正在使用Linq to SQL和.NET 3.5中的C#.

假设我想要一个Extended Client类:

public class ExtendedClient 
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string strVal { get; set; }
}

在我的数据层中,我想从两个表中填充它(dc是我的DataContext):

public ExtendedClient getExtendedClient(int clientID)
{
    var c = dc.GetTable();
    var cs = dc.GetTable();
    var q = from client in c
            join setting in cs
            on client.ClientID equals setting.ClientID
            where client.ClientID == clientID
            select new ExtendedClient { client, setting.strValue };
    return q;   
}

我试图返回表tClient中的行加上tClientSetting中的一个额外列.

我得到的令人讨厌的错误是:无法使用集合初始化程序初始化类型'ExtendedClient',因为它没有实现'System.Collections.IEnumerable'并且不能隐式地将类型'System.Linq.IQueryable'转换为'ExtendedClient'.存在显式转换(您是否错过了演员?)

我意识到这是一个基本的错误,但我无法确定如何最好地实现IEnumerable,因为我找不到一个例子.

每次我想要一个专门的对象时,我是否必须这样做?提前致谢.



1> Mehrdad Afsh..:
public ExtendedClient getExtendedClient(int clientID)
{
    var c = dc.GetTable();
    var cs = dc.GetTable();
    var q = from client in c
            join setting in cs
            on client.ClientID equals setting.ClientID
            where client.ClientID == clientID
            select new ExtendedClient { ID = client.ClientID, Name = client.Name, strVal = setting.strValue };
    return q.Single();
}

每次需要返回专用对象时,您都必须执行类似的操作.如果您不需要返回它,则不必指定类型,也不需要特殊类.您可以使用匿名类型:

from client in c
join setting in cs
on client.ClientID equals setting.ClientID
where client.ClientID == clientID
select new { ID = client.ClientID, Name = client.Name, strVal = setting.strValue };

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有