使用Linq to sql将List <string>插入ntext字段

时间:2016-03-31 08:20:51

标签: c# database linq list

我有这堂课:

public class Course
{
    public String Name { set; get; }
    public int Code { set; get; }
    public List<String> PreRequireCources = new List<String>();
}

PreRequireCources列表由这样的列表框填充:

Course cu = new Course();
cu.Name = txtName.Text;
cu.Code = Convert.ToInt32(txtCode.Text);
cu.PreRequireCources= lstPreRequirsist.Items
    .Cast<string>().ToList();

这是我的课程表:

enter image description here

如果我这样做,我会收到错误,因为PreRequireCourcesList,但数据库列是ntext

var db = new LinqDataContext();
db.Cources.InsertOnSubmit(cc);

那么如何将此列表保存到我的数据库中?有没有更好的方法将这个列表保存到每个学生的数据库中? 感谢。

3 个答案:

答案 0 :(得分:0)

有两种选择:

1。将字符串转换为一个字符串(不太好)

您可以将Course课程更改为:

public class Course
{
    public String Name { set; get; }
    public int Code { set; get; }
    public String PreRequireCources = string.Empty;
}

并从列表框中填充,如下所示:

cu.PreRequireCources = string.Join(",", lstPreRequirsist.Items.
                             Cast<string>());

通过这种方式,您可以将这些课程存储为,列中的PreRequire分隔列表。

注意这不是存储此类数据的好方法。 CoursePreRequireCources之间似乎存在mxn关系,所以......

2。创建交叉表以定义mxn关系

解决此问题的更好方法是创建一个名为PreRequiredCoursesToCourses的表格。让我们说你有这些课程

Code    Name        PreRequireCourses
1       Course1     Course2, Course3
2       Course2     Course3
3       Course3

然后从该表中删除PreRequireCourses并构建一个交叉表:

CourseCode    PreRequiredCode
=============================
1             2
1             3
2             3

这使您的数据设计更加高效和灵活。存储必须再次解析的字符串以找出所需的课程并不是一个好主意。

如果您想稍后要求提供相关信息,现在可以使用JOIN获取课程预先要求的所有课程。

答案 1 :(得分:0)

您正在尝试将值列表插入到需要单个文本值的列中。因此,您可以将列表中的所有字符串连接成一个字符串

 cu.PreRequireCources= String.join(", ",lstPreRequirsist.Items
.Cast<string>().ToList());

用分隔符替换“,”。

答案 2 :(得分:0)

您可以将List作为未映射的属性,并使另一个string列映射。

然后您可以序列化您的列表,例如,使用Newtonsoft.Json

public class Course
{
   public String Name { set; get; }
   public int Code { set; get; }
   // Mapped to column "PreRequire"
   public String PreRequire {
      get {
         return JsonConvert.SerializeObject(PreRequireCources);
      }
      set {
         PreRequireCources = JsonConvert.DeserializeObject<List<string>>(value);
      }
   }
   // Not mapped to any column
   public List<String> PreRequireCources = new List<String>();
}