gpt4 book ai didi

c# - 如何将 sql 表中的多列分配给 List<> 中的单列

转载 作者:行者123 更新时间:2023-11-29 17:59:49 24 4
gpt4 key购买 nike

我的 sql 中有 3 个表:-

Table1(ClassNote)、Table2(ClassSamplePaper)、Table3(ClassEbook) 的 PK 分别为 ClassNoteID、ClassSamplePaperID 和 ClassEbookID。

现在我遇到了一种情况,我将它们的值传递到从我的 c# Controller 到 Angular Controller 的单独列表。

我的 C# 代码是:-

switch (dbundle.MaterialIndicator)
{
case 1:
List<ClassEbook> EBookList = null;
EBookList = (from cl in db.ClsObj
join csr in db.ClassSubRelationObj on cl.ClassesID equals csr.ClassSubjectFK
join csmr in db.ClassSubMatRelationObj on csr.ClassSubjectFK equals csmr.SubjectFK
join eb in db.CebookObj on csmr.ClassEbookFK equals eb.ClassEbookID
where cl.ClassesID == dbundle.ClassesFK && csr.ClassSubjectFK == dbundle.ClassSubjectFK
select eb).ToList();
return new JsonResult { Data = EBookList, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
case 2:
List<ClassNote> NoteList = null;
NoteList = (from cl in db.ClsObj
join csr in db.ClassSubRelationObj on cl.ClassesID equals csr.ClassSubjectFK
join csmr in db.ClassSubMatRelationObj on csr.ClassSubjectFK equals csmr.SubjectFK
join cn in db.CNoteObj on csmr.ClassNoteFK equals cn.ClassNoteID
where cl.ClassesID == dbundle.ClassesFK && csr.ClassSubjectFK == dbundle.ClassSubjectFK
select cn).ToList();

return new JsonResult { Data = NoteList, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
case 3:
List<ClassSamplePaper> SPList = null;
SPList = (from cl in db.ClsObj
join csr in db.ClassSubRelationObj on cl.ClassesID equals csr.ClassSubjectFK
join csmr in db.ClassSubMatRelationObj on csr.ClassSubjectFK equals csmr.SubjectFK
join sp in db.CSPObj on csmr.ClassEbookFK equals sp.ClassSamplePaperID
where cl.ClassesID == dbundle.ClassesFK && csr.ClassSubjectFK == dbundle.ClassSubjectFK
select sp).ToList();
return new JsonResult { Data = SPList, JsonRequestBehavior = JsonRequestBehavior.AllowGet };

我在我的 Angular Controller 中获取列表:-

ClassFactory.AvailableListData($scope.MaterialTblID).then(function (d) {
$scope.AvailableList = d.data;
if ($scope.AvailableList != null && $scope.AvailableList.length != 0) {
$scope.AvailableListTextToShow = "";
}
else {
$scope.AvailableListTextToShow = "No Data Available";
}
}, function (error) {
alert('Cannot Load AvailableList Data');
})

代码运行良好!但我想对不同表中的 ID 使用单个字段。我怎样才能实现这个目标?

Razor 语法:-

 <tr ng-repeat="L in AvailableList">
<td>
{{$index+1}}
</td>
<td>
{{L.Heading}}
</td>
<td>
{{L.ID}} //I want to use it here
</td>
</tr>

抱歉,如果我没有把问题说清楚。欢迎对此发表评论。

最佳答案

我建议创建一个ViewModel用于显示目的,它将是一个普通的类,只有HeadingID属性(加上您想要渲染的任何其他内容)。在 Controller 中,您必须从数据库模型映射到 ViewModel,或者使用 AutoMapper 之类的东西并返回这个新的“ViewModel”,而不是 SPListNoteList电子书列表

一个例子是:

public class MyViewModel
{
public string Heading { get;set; }
public int ID { get; set; }
}

public static class MyViewModelsExtensions
{
public static IQueryable<ListViewModel> ToEbookViewModels(this IQueryable<ClassEbook> classEBooks)
{
return classEBooks.Select(m => new ListViewModel { Heading = m.Heading, ID = m.ClassEbookID });
}

// TDOD: Add other ToViewModels methods to handle tranforming ClassNote and ClassSamplePaper models
}

// Inside controller action/where your current switch statement is
switch (dbundle.MaterialIndicator)
{
case 1:
var EBookList = (from cl in db.ClsObj......);
List<ListViewModel> viewModelEbook = EBookList.ToEbookViewModels().Distinct().ToList();
return new JsonResult { Data = viewModelEbook, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
case 2:
case 3:
// both of these will look similar to the above case handling except you will pass in IQueryable of ClassNote and ClassSamplePaper
}

我没有在 Angular 中做过任何工作,但假设您当前使用 JsonResultData 属性来工作,那么您不必更改任何内容..

有关拥有单独的域/数据模型和 View 模型的主题和优点的一些进一步阅读可以找到 here模式三here 。是的,该示例引用了 Razor,但原理是相同的。

关于c# - 如何将 sql 表中的多列分配给 List<> 中的单列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48484655/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com