【发布时间】:2019-12-16 18:15:52
【问题描述】:
我有两个用外键链接的 SQL 表。我想在 ASP.NET Core MVC 中的模型中将子表中的值过滤(在哪里)的这个连接的结果。我该怎么做。
我在 SQL 中有这 2 个带有外键的表。我先做了一个数据库。所以,我的项目中有模型。
此外,我还为这些模型创建了接口。
假设表 1 是 Order,表 2 是 OrderLine。 在 SQL 级别上,我会执行以下操作:
SELECT
Order.CustomerName
, OrderLine.Product
FROM Order
JOIN OrderLine
ON Order.OrderID = OrderLine.OrderID
WHERE OrderLine.NotYetDelivered = True
因此,我想查看包含他们订购但尚未收到的产品的客户列表。
如何在 ASP.NET Core 中使用 MVC 执行此操作?
我在 Linq 上做了很多尝试。并有以下代码:
var classification = classificationRepository.getAllClassifications();
var classificationLanguage = classificationLanguageRepository.getAllClassificationLanguages();
var ClassificationOne1Language = (from c in classification
join l in classificationLanguage
on c.SuClassificationId equals l.SuClassificationId
//where l.SuLanguageId == 1
select new { c.SuClassificationId, l.SuClassificationName });
//var ClassificationOne1Language = (from c in classificationLanguage
// select new { c.SuClassificationId, c.SuClassificationName });
List<ClassificationWithLanguageViewModel> x = new List<ClassificationWithLanguageViewModel>();
foreach (var c in ClassificationOne1Language)
它在“foreach”循环中显示以下内容: System.Data.SqlTypes.SqlNullValueException:'数据为空。不能对 Null 值调用此方法或属性。'
但是当我使用 SQL 探查器时,我得到以下 SQL 并且有 2 行结果。
SELECT [s].[SuClassificationID], [s].[SuClassificationColor], [s].[SuClassificationStatusID], [s].[SuCreateDate], [s].[SuCreatorID], [s].[SuDefaultClassficiationPageID], [s].[SuDropDownSequence], [s].[SuHasDropDown], [s].[SuModifierID], [s].[SuModifyDate]
FROM [SuClassification] AS [s]
任何建议为什么在 SQL 级别上我有结果但代码认为不同?
【问题讨论】:
-
我建议研究实体框架核心。然后,您可以在 SQL 代码中使用 Linq 查询来查询表并将值分配给您的模型。
-
为了清楚起见,有许多不同的方法可以满足您的要求。您可能应该只搜索“asp.net 从数据库中检索数据”,找到看起来像您需要的东西并尝试一下,然后在遇到问题时提出问题。
-
谢谢。我确实尝试过类似的东西(我尝试了很多东西)。如果我创建一个视图模型并根据 linq 查询填充它。这会是一条路吗?
-
仅供参考。它实际上与订单无关,但这样更容易解释。我自愿为社区建立一个分享可持续发展知识的平台。
-
是的,这样就可以了。
标签: c# asp.net-mvc asp.net-core model-view-controller model