通过组合两个列表来创建列表

时间:2012-06-13 13:50:51

标签: c#

我是.Net的新手。我的项目中有两个对象CustomerCountry

public class Customer
{
  public int CustomerId {get;set;}
  public string CustomerName {get;set}
  public String Street {get;set}
  public String Address {get;set}
  public int CountryId {get;set}
  //...o
}


public class Country
{
  public int CountryId {get;set;}
  public String CountryName{get;set}
}

我有两个列表,List<Customer>List<Country>.

我正在使用sql join语句列出具有国家/地区的客户。但我很困惑如何创建一个包含客户和国家名称的单一列表。

是否有必要为此创建单独的类?

提前致谢。

5 个答案:

答案 0 :(得分:7)

不要将国家/地区ID存储在您的Customer类中,只需存储对象本身即可。也就是说,就像这样:

public Class Customer
{
public int CustomerId {get;set;}
public string CustomerName {get;set}
public String Street {get;set}
public String Address {get;set}
public Country Country {get;set}
//...o
}

然后,您在Customer对象中拥有所有需要的信息,并且无需尝试合并列表或类似内容。

在您的SQL声明中,加入国家/地区表并获取国家/地区名称作为结果集的一部分,然后您可以在一次服务器往返中填充客户列表。

答案 1 :(得分:1)

您可以添加到您的客户类

public Country country { get; set; }

答案 2 :(得分:1)

如果您能从数据库中获取正确格式的数据,请务必先执行此操作!数据针对此进行了优化。

但是如果你有两个列表并且你需要使用它,那么LINQ应该有所帮助。你可以这样做:

var query = from customer in customers
            from country in countries
            where customer.CountryId == country.CountryId
            select new
            {
                Customer = customer,
                Country = country
            };

这将给出一组匿名对象,其中Customer属性包含一个客户,而Country属性包含匹配的国家/地区。

如果您确实需要使用List<>类型,则可以随时写query.ToList()

如果您不喜欢匿名类型,则可以创建新类,也可以改进Customer类以引用Country并返回该实例。

答案 3 :(得分:0)

是的,您需要创建一个包含每个(客户和国家/地区)的单独属性的类,或者,您需要创建一个包含其他Country属性的增强型客户类。

答案 4 :(得分:0)

我建议看看Entity Framework

它是Microsoft的Object-Relational-Mapper(ORM),它专为抽象数据库访问而设计,就像您尝试的那样。