我是.Net的新手。我的项目中有两个对象Customer
和Country
:
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语句列出具有国家/地区的客户。但我很困惑如何创建一个包含客户和国家名称的单一列表。
是否有必要为此创建单独的类?
提前致谢。
答案 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),它专为抽象数据库访问而设计,就像您尝试的那样。