我有以下代码.我收到错误:
"转换为值类型'Int32'失败,因为具体化值为null.结果类型的泛型参数或查询必须使用可空类型."
当CreditHistory表没有记录时.
var creditsSum = (from u in context.User
join ch in context.CreditHistory on u.ID equals ch.UserID
where u.ID == userID
select ch.Amount).Sum();
Run Code Online (Sandbox Code Playgroud)
如何修改查询以接受空值?
我认为在很多情况下这是一个普遍问题,但我没有在网上找到合适的答案.在我的MVC应用程序中,我有以下表格:
问题表:
---------------------------------------------
IssueID (pk) | CategoryID (fk) | IssueNumber
---------------------------------------------
1 | 1 | 1
2 | 1 | 2
3 | 2 | 1
4 | 1 | 3
Run Code Online (Sandbox Code Playgroud)
分类表:
-----------------------------------
CategoryID (pk) | Prefix | Name
-----------------------------------
1 | COM | Computer
2 | GEN | General
Run Code Online (Sandbox Code Playgroud)
在这里,我对两个类别(COM和GEN)使用IssueID(主键)字段.另一方面,我想依次生成IssueNumber(1,2,3 ......)而没有任何CategoryID的差距.另一方面,我还想从1开始为另一个类别创建IssueNumber,如上所示.所以问题是:
1)上述方法有问题吗?如果是这样,你对此有何建议?
2)在创建记录之前,如何获取IssueNumber的最大值?我想在SaveChanges()方法上做这个(我使用Entity Framework).由于我没有将IssueNumber字段设为PK,因此我无法使MsSQL Server自动增加此列值.
任何帮助,将不胜感激.提前致谢.
更新:
以下是使用lambda的解决方案:
public int SaveIssue(Issue issue)
{
int max = context.Issues.Where(m => m.CategoryID == issue.CategoryID ).Max(m => m.IssueNumber);
issue.IssueNum = max + 1; …Run Code Online (Sandbox Code Playgroud) sql-server asp.net-mvc entity-framework primary-key code-first