我通过从表中选择最大ID并将其递增1来手动插入表的ID,如果表为空并且max返回null,我如何使用c#和linq做到这一点,我正在使用以下代码,但是给出错误“不能将空值分配给类型为System.Int32的成员,这是非空值类型”

var t = (from tab1 in db.questions select tab1.QuestionId1).Max();
            if (t!=null)
            {
                 qui = t + 1;
            }

            else
            {
                 qui = 1;
            }

#1楼 票数:3

这样的事情行吗?

// Assume we want to start with id 1
var maxId = db.Questions
    .Max(q => q.QuestionId1)
    .DefaultIfEmpty(0)
    .Max();

return maxId + 1;

DefaultIfEmpty将处理空表的情况。

数据库通常具有自动递增的id功能。 如果使用的是实体框架,则默认情况下应启用它。

#2楼 票数:1 已采纳

绝对不是获取“新id”的首选方法(最好由数据库生成),但是在这里:

var maxId = ((from tab1 in db.questions select (int?)tab1.QuestionId1).Max() ?? 0) + 1;

或等效形式,但IMO更易于阅读:

var maxId = (db.questions.Select(x => (int?)x.QuestionId1).Max() ?? 0) + 1

最初的问题是您正在使用IEnumerable<int>参数调用Max() ,并且由于返回值是intint不能为null ,因此不允许它返回空值(引发异常) 。

我正在将Select()返回的枚举类型转换为Nullable<int> (或简称int? )类型的枚举类型,因此Max()返回一个int? 如果可枚举为空,则它可以返回null (例如,没有选择任何行的情况),而不是引发异常。

#3楼 票数:0

您可能正在使用LINQ的Extension Method语法在寻找类似的内容:

var maxID = db.Questions.Any() 
            ? db.Questions.Max(q => QuestionId1) + 1
            : 1

如果数据库中有任何Questions ,请抓住最高的QuestionId1并加1。否则返回1。

  ask by mohamed baradie translate from so

未解决问题?本站智能推荐:

5回复

如何使用linq从表中获取最大ID

我有一个表Estimation,其中有一个列EstimationNo,我试图像这样获得最大EstimationNo- 但是问题是,如果同一张表由不同的用户同时保存,则为两个用户保存相同的EstimationNo。 喜欢-10,10 现在,如何处理此问题。请提供一些解决方案。
1回复

使用LINQ基于记录ID获取最大DataGridViewRow

我试图获得具有最大记录id值的DataGridViewRow。 我能够获得记录ID本身,但我需要找到行本身。 这是我获取最大记录ID的代码,它工作正常: 我试过了: 我不清楚如何得到行本身,所以我可以把焦点放在它上面:
3回复

LINQ连接两个表并获取具有最大ID的行

我需要连接两个表,以获取最新的行(一个表上具有最大ID)。 我有以下表格(和示例数据): tblParts tblPartsVersion 我已经构造了如下的SQL查询: 差不多,我正在得到所需的结果: 我需要一些帮助来尝试将此查询转换为LINQ,但我为此编写了适当的代码
2回复

LINQ;如何使用连接获取最大ID的记录?

我想从列表中找到一条记录,该记录应该是列表的MAX(id)。 该记录用于在网格视图中显示。 在这里,我想将MasterRenewal的一列与cacheProducts的ID相匹配,所以我尝试了以下操作 如果MasterRenewal包含多个具有相同MstSeq的记录,那么我想获取最后生
1回复

使用LINQ获取连接表中的最大计数

我在Stackoverflow上遇到了很多问题,恐怕我仍然找不到答案。 我正在使用实体框架。 我正在使用LINQ寻找过去七天中最受欢迎的课程。 我在查询中涉及四个表,时间表,会话,位置和联结表ClientSesions 时间表的模型是 会话模型 Junction ClientS
4回复

LINQ:如何通过groupby子句获取最大ID?

我正在寻找一种在LINQ中使用'Group By'子句获取最大ID记录的方法 考虑以下样本数据 我想在其中获得两个记录作为列表,例如第二和第四 记录(即)ProcessSeq 12和14。 它无法正常工作,因此如何在LINQ中做到这一点。 请任何人帮助。
1回复

Linq查询分组和最大日期,获取ID

无法解决如何完成此链接查询的问题。 我想获取与每个QueueNumber的每个最大ProcessingStart和ProcessingComplete关联的Foo.Id 鉴于: 我意识到上面的两个ProcessingStart / ProcessingCOmplete分配有不同的错误,
1回复

尝试使用Linq从2个表中获取带有id的总价

我目前正在努力创建一个 linq 语句来计算总价。 我有2张桌子。 预订表: 预订表乘客设置表乘客设置表目标确实是创建一个 linq 语句,它将根据一个 FlightNo 获得一个 PersonID 的票价总和所以基本上,对于航班号 1,我想检索 19500 我希望有一个人可以帮助我 ! 我尝试过的