Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 插入一个列表<;字符串>;使用Linq to sql访问ntext字段_C#_Database_Linq_List - Fatal编程技术网

C# 插入一个列表<;字符串>;使用Linq to sql访问ntext字段

C# 插入一个列表<;字符串>;使用Linq to sql访问ntext字段,c#,database,linq,list,C#,Database,Linq,List,我有这门课: public class Course { public String Name { set; get; } public int Code { set; get; } public List<String> PreRequireCources = new List<String>(); } 这是我的课程表: 如果我这样做,我会得到一个错误,因为prerequireresources是一个列表,但数据库列是一个ntext: var

我有这门课:

public class Course
{
    public String Name { set; get; }
    public int Code { set; get; }
    public List<String> PreRequireCources = new List<String>();
}
这是我的课程表:

如果我这样做,我会得到一个错误,因为
prerequireresources
是一个
列表
,但数据库列是一个
ntext

var db = new LinqDataContext();
db.Cources.InsertOnSubmit(cc);
那么,如何将此列表保存到我的数据库中?是否有更好的方法将此列表保存到每个学生的数据库中?
谢谢。

有两种选择:

1.将字符串压缩为一个字符串(不太好) 您可以将
课程
课程更改为:

public class Course
{
    public String Name { set; get; }
    public int Code { set; get; }
    public String PreRequireCources = string.Empty;
}
然后从列表框中按如下方式填充:

Course cu = new Course();
cu.Name = txtName.Text;
cu.Code = Convert.ToInt32(txtCode.Text);
cu.PreRequireCources= lstPreRequirsist.Items
    .Cast<string>().ToList();
cu.PreRequireCources = string.Join(",", lstPreRequirsist.Items.
                             Cast<string>());
然后从该表中删除
prerequiresources
,并构建一个交叉表:

CourseCode    PreRequiredCode
=============================
1             2
1             3
2             3
这使您的数据设计更加高效和灵活。存储您必须再次解析的字符串以确定哪些课程是必需的,这不是一个好主意


如果您想稍后请求信息,现在可以使用
JOIN
获取课程所需的所有课程。

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

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

将“,”替换为分隔符。

您可以将
列表作为未映射属性,并拥有另一个映射的
字符串

然后可以序列化列表,例如,使用
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>();
}
公共课
{
公共字符串名称{set;get;}
公共整数代码{set;get;}
//映射到列“PreRequire”
公共字符串预要求{
得到{
返回JsonConvert.SerializeObject(PrerequireResources);
}
设置{
PrerequireResources=JsonConvert.DeserializeObject(值);
}
}
//未映射到任何列
公共列表PrerequireResources=新列表();
}

您必须为PrerequireResources创建一个单独的表,它可以有3列Id、PrerequireResourceString和CourseCodeTip:切勿在单个字段中存储多值项。这是一场噩梦,以后要维持下去。最好使用第二个表
RequiredCourse
,该表有两个外键:一个FK指向有必修课的课程,另一个FK指向必修课的课程。
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>();
}