C# 基于CategoryName列,将Products CSV数据添加到包含实体表:Products和Categories的数据库中
我有一个CMS系统,用户可以在其中添加C# 基于CategoryName列,将Products CSV数据添加到包含实体表:Products和Categories的数据库中,c#,sql,sql-server,linq,C#,Sql,Sql Server,Linq,我有一个CMS系统,用户可以在其中添加类别对象,然后用户可以单击创建的类别并向其中添加产品对象 我现在正在开发一个CSV数据导入表单,它应该允许用户做同样的事情,但只需上传一个CSV文件 CSV文件数据(灰色阴影)是产品列表。注-每种产品的类别名称列: 这是产品和类别的类别: public class Product { public int Id { get; set; } public string Barcode { get; set; } [Required]
类别对象
,然后用户可以单击创建的类别并向其中添加产品对象
我现在正在开发一个CSV数据导入表单
,它应该允许用户做同样的事情,但只需上传一个CSV文件
CSV文件数据(灰色阴影)是产品列表。注-每种产品的类别名称列:
这是产品和类别的类别:
public class Product
{
public int Id { get; set; }
public string Barcode { get; set; }
[Required]
public string Name { get; set; }
public string Description { get; set; }
[Required]
public Byte[] Image { get; set; }
[Required]
public Decimal Price { get; set; }
[Required]
public bool ShowOnIndex { get; set; }
}
public class Category
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
[Required]
public Byte[] Image { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
但是,上面的LINQ查询会得到一个产品列表,我需要能够根据两个实体(类别和产品)将它们存储到数据库中。有人能建议一种方法吗。我是LINQ的新手
我希望能够将所有唯一的类别名称提取到一个列表中,并将其添加到数据库中的Categories表中,然后能够根据关联的类别名称添加每个产品。我假设类别应该首先导入-我没有类别的数据文件。通常,用户会手动编写一个类别名称,并手动上传一张图片,以在我当前的CMS中创建一个类别 有许多CSV解析库,它们比
string.split
做得更好。CSVHelper用于实例或内置。
// Creates Product objects from array of records
// At present, images are assumed void
// When CSV data contains images, then this code will need changing slightly.
var CSVProducts = from line in records
let columns = line.Split(',')
select new Product
{
Id = int.Parse(columns[0]),
Barcode = columns[13],
Name = columns[1],
CategoryName = CapitaliseWords(columns[9]),
Description = columns[2],
Price = decimal.Parse(columns[4])
};
ProductsList = CSVProducts.ToList();
var CSVCategories = File.ReadLines(path).Skip(1)
.Select(l => l.Split(new[] { ',' })[9])
.Where(category => category.Length > 0)
.Distinct(StringComparer.InvariantCultureIgnoreCase)
.Select(s => new Category { Name = CapitaliseWords(s) });
CategoriesList = CSVCategories.ToList();
// Creates Product objects from array of records
// At present, images are assumed void
// When CSV data contains images, then this code will need changing slightly.
var CSVProducts = from line in records
let columns = line.Split(',')
select new Product
{
Id = int.Parse(columns[0]),
Barcode = columns[13],
Name = columns[1],
CategoryName = CapitaliseWords(columns[9]),
Description = columns[2],
Price = decimal.Parse(columns[4])
};
ProductsList = CSVProducts.ToList();
var CSVCategories = File.ReadLines(path).Skip(1)
.Select(l => l.Split(new[] { ',' })[9])
.Where(category => category.Length > 0)
.Distinct(StringComparer.InvariantCultureIgnoreCase)
.Select(s => new Category { Name = CapitaliseWords(s) });
CategoriesList = CSVCategories.ToList();