Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用带有EF5的where子句获取最大值是否很热?_C#_Linq_Entity Framework_Linq To Sql - Fatal编程技术网

C# 使用带有EF5的where子句获取最大值是否很热?

C# 使用带有EF5的where子句获取最大值是否很热?,c#,linq,entity-framework,linq-to-sql,C#,Linq,Entity Framework,Linq To Sql,我已经尝试了所有的场景,但都无法实现。检索最大字段值并同时使用where子句的EF5语法是什么 这就是我尝试过的: int result = context.ArchiveItems.Where(x => x.LevelA == levelA && x.LevelB == levelB && x.LevelC == levelC).Max(y => y.LevelCItem); 这是桌子。所有“级别*”列都存在于唯一约束中。我需要MAX-LevelC

我已经尝试了所有的场景,但都无法实现。检索最大字段值并同时使用where子句的EF5语法是什么

这就是我尝试过的:

int result = context.ArchiveItems.Where(x => x.LevelA == levelA && x.LevelB == levelB && x.LevelC == levelC).Max(y => y.LevelCItem);
这是桌子。所有“级别*”列都存在于唯一约束中。我需要MAX-LevelCItem,其中其他“Level*”字段以某种组合存在:

  • 表“档案项目”
  • ItemId bigint PK
  • 整型水平仪
  • 级别B int
  • 级别c int
  • LevelCItem int
我犯了几个错误。最新消息是:

转换为值类型“Int32”失败,因为具体化的值 是空的。结果类型的泛型参数或查询必须 使用可为空的类型


提前感谢所有能提供帮助的人。

看起来您的
LevelCItem
类型是
int?

使用:

“物化值为null”这一例外意味着LINQ不支持在应用
Where
过滤器并计算空集合属性的最大值之后的结果集合。(他们显然有点怀疑默认值应该是
0
)您可以通过强制转换为可为null的
int?
来解决此问题:

int? result = context.ArchiveItems
    .Where(x => x.LevelA == levelA && x.LevelB == levelB && x.LevelC == levelC)
    .Max(y => (int?)y.LevelCItem);
请注意,返回类型
result
现在可以为空。如果
result
null
,则表示过滤后的集合为空。在本例中,如果要获取值
0
,只需在查询末尾追加
GetValueOrDefault()

int result = context.ArchiveItems
    .Where(x => x.LevelA == levelA && x.LevelB == levelB && x.LevelC == levelC)
    .Max(y => (int?)y.LevelCItem)
    .GetValueOrDefault();
那么:

var result = context
.ArchiveItems
.Where(x => x.LevelA == levelA && x.LevelB == levelB && x.LevelC == levelC)
.OrderByDescendig(y => y.LevelCItem)
.Select(y => y.LevelCItem)
.FirstOrDefault();

您发布的字段类型是在数据库引擎的上下文中,我认为在c#的上下文中,它可能是
int?
并且值可能丢失/null,您应该再次检查它。没有字段是可为null的。您怎么知道?你能不能试着把所有的项目循环一下,然后打印出来。所有字段都不能为空。
var result = context
.ArchiveItems
.Where(x => x.LevelA == levelA && x.LevelB == levelB && x.LevelC == levelC)
.OrderByDescendig(y => y.LevelCItem)
.Select(y => y.LevelCItem)
.FirstOrDefault();