asp.net-具有关系数据的LINQ查询
我有两个表类别和文件。查看图片中的关系 我编写了以下查询,根据关系从两个表中选择数据asp.net-具有关系数据的LINQ查询,asp.net,linq,entity-framework-6,Asp.net,Linq,Entity Framework 6,我有两个表类别和文件。查看图片中的关系 我编写了以下查询,根据关系从两个表中选择数据 public List<DocumentViewModel> All() { var docs = _context.Document.ToList(); List<DocumentViewModel> docList = docs.Select(x => new DocumentViewModel
public List<DocumentViewModel> All()
{
var docs = _context.Document.ToList();
List<DocumentViewModel> docList = docs.Select(x => new DocumentViewModel
{ DocumentId = x.DocumentId,
DocumentPath = x.DocumentPath,
CategoryId = x.CategoryId,
CategoryName = x.Category.CategoryName }).ToList();
return docList;
}
这是我的情态动词
文件
知道我在哪里犯错了吗 在这种情况下,没有理由在内存中获取一个列表,然后执行投影,您可以直接从EF执行此操作。即使没有定义关系,如果您对结果进行投影,EF也会为
CategoryName
返回null
。如果您首先进入内存,则如果没有类别关系,则需要NRE
public List<DocumentViewModel> All()
{
return _context.Document.Select(x => new DocumentViewModel
{ DocumentId = x.DocumentId,
DocumentPath = x.DocumentPath,
CategoryId = x.CategoryId,
CategoryName = x.Category.CategoryName}).ToList();
}
public List All()
{
return\u context.Document.Select(x=>newdocumentviewmodel
{DocumentId=x.DocumentId,
DocumentPath=x.DocumentPath,
CategoryId=x.CategoryId,
CategoryName=x.Category.CategoryName}).ToList();
}
它失败的最初原因
Include
返回关系这意味着您的数据完整性有缺陷。签入孤立文档的数据(没有相应的类别)。
public class Document
{
[Key]
public int DocumentId { get; set; }
[Required]
public string DocumentPath { get; set; }
public Nullable<int> CategoryId { get; set; }
public virtual Category Category { get; set; }
}
public class Category
{
[Key]
public int CategoryId { get; set; }
[Required]
public string CategoryName { get; set; }
public virtual ICollection<Document> Documents { get; set; }
}
public class DocumentViewModel
{
public int DocumentId { get; set; }
public string DocumentPath { get; set; }
public int? CategoryId { get; set; }
public string CategoryName { get; set; }
}
public List<DocumentViewModel> All()
{
return _context.Document.Select(x => new DocumentViewModel
{ DocumentId = x.DocumentId,
DocumentPath = x.DocumentPath,
CategoryId = x.CategoryId,
CategoryName = x.Category.CategoryName}).ToList();
}