我将存储一个逗号分隔的课程列表,其中包含一个产品,可以有任意数量的课程,也可以有多个课程。我正在使用MVC,我希望能够在列表进入模型之前将列表提取到某种类型的集合中。基本上我不想将列表解析为视图或控制器内部的数组...如何/在哪里执行此操作的最佳方式,这是我的存储库使用的产品对象。我将如何使用courseIDs集合的类型以及将其从数据库中的逗号分隔列表转换为数组或其他内容?
namespace DomainModel.Entities
{
public class Product
{
public int ProductID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public decimal Price { get; set; }
public ??? CourseIDs { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DomainModel.Entities;
namespace DomainModel.Abstract
{
public interface IProductsRepository
{
IQueryable<Product> Products { get; }
}
}
答案 0 :(得分:0)
System.Collections.Generic.List<string>
或IList<string>
怎么样?
您可以在DAO中进行拆分(如果您正在使用该模式),或者您可以将您的Product类中的字符串存储为延迟加载拆分列表:
public class Product {
private string _courseIdsString;
private IList<string> _courseIds;
public IList<string> CourseIds {
get {
if(_courseIds == null)
_courseIds = new List<string>(_courseIds.Split(',' StringSplitOptions.RemoveEmptyEntries));
return _courseIds;
}
// ...
}
答案 1 :(得分:0)
如果它提供了您需要的所有功能,IEnumerable<string>
可能是存储课程ID集合的最合适方法。它是限制最少的“集合”界面。如果您需要IList
(Add
,Remove
,Count
等)提供的其他功能,那么IList<string>
也是一个选项。
在数据访问层中保留逗号分隔字符串的任何解析(从数据库中读取的相同位置)。将这些细节泄露给您的模型是没有意义的。