相关疑难解决方法(0)

转换为值类型"Int32"失败,因为实现值为null

我有以下代码.我收到错误:

"转换为值类型'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)

如何修改查询以接受空值?

.net c# linq-to-entities entity-framework

190
推荐指数
5
解决办法
12万
查看次数

如何在创建新记录之前获取最大ID值?

我认为在很多情况下这是一个普遍问题,但我没有在网上找到合适的答案.在我的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

2
推荐指数
1
解决办法
1531
查看次数