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# 使用linq时,外键为空(而不是空)_C#_Linq - Fatal编程技术网

C# 使用linq时,外键为空(而不是空)

C# 使用linq时,外键为空(而不是空),c#,linq,C#,Linq,我正在使用 var s = db.sModels.ToList().First(r => r.Status == CustomStatus.Available); var s=db.sModels.ToList().First(r=>r.Status==CustomStatus.Available); 获取第一个可用项 但是,在提取时,s中的外键结果是null 我已连接到数据库,并看到外键不是null(而是1) 为什么会变成null?假设这是实体的Linq-这是默认行为-如果您想具体化相关实体-

我正在使用

var s = db.sModels.ToList().First(r => r.Status == CustomStatus.Available); var s=db.sModels.ToList().First(r=>r.Status==CustomStatus.Available); 获取第一个可用项

但是,在提取时,
s
中的外键结果是
null

我已连接到数据库,并看到外键不是
null
(而是
1


为什么会变成
null

假设这是实体的Linq-这是默认行为-如果您想具体化相关实体-比如说
SomeEntity
,您可以使用
Include
查询,在这种情况下,将填充FK和实体:

var s = db.sModels.Include(r=> r.SomeEntity)
                  .First(r => r.Status == CustomStatus.Available);
有关不使用包含查询仅检索FK的解决方案,请参阅以下博文:

正如在对问题Linq to Entities的评论中所指出的,Linq to Entities目前不支持枚举,因此上述操作实际上无法正常工作。作为一种解决方法(直到EF 5),您现在可以在DB上使用整数:

int statusAvailable = (int) CustomStatus.Available;
var s = db.sModels.Include(r=> r.SomeEntity)
                  .First(r => r.Status == statusAvailable);

假设这是Linq to Entities-这是默认行为-如果您想具体化相关实体-比如说
SomeEntity
,您可以使用
Include
查询,在这种情况下,将填充FK和实体:

var s = db.sModels.Include(r=> r.SomeEntity)
                  .First(r => r.Status == CustomStatus.Available);
有关不使用包含查询仅检索FK的解决方案,请参阅以下博文:

正如在对问题Linq to Entities的评论中所指出的,Linq to Entities目前不支持枚举,因此上述操作实际上无法正常工作。作为一种解决方法(直到EF 5),您现在可以在DB上使用整数:

int statusAvailable = (int) CustomStatus.Available;
var s = db.sModels.Include(r=> r.SomeEntity)
                  .First(r => r.Status == statusAvailable);

为什么在第一次调用
之前调用
.ToList()
?这可能不是问题的根源,但这是徒劳的。@Tim s.因为否则将出现不受支持的异常。(LINQ to Entities中不支持指定的类型成员“Status”。只支持初始值设定项、实体成员和实体导航属性。)为什么在
第一次
之前调用
.ToList()
?这可能不是问题的根源,但这是徒劳的。@Tim s.因为否则将出现不受支持的异常。(LINQ to实体中不支持指定的类型成员“状态”。只支持初始值设定项、实体成员和实体导航属性。)神奇!您是否介意进一步告诉我为什么外键默认为
null
?我想这只是EF团队的设计决定-EF 5也将为enum提供支持,因此您不需要解决
ToList()
-这将是一个性能阻力。在那之前,我会在数据库中使用整数值,而不是具体化所有结果。太神奇了!您是否介意进一步告诉我为什么外键默认为
null
?我想这只是EF团队的设计决定-EF 5也将为enum提供支持,因此您不需要解决
ToList()
-这将是一个性能阻力。在此之前,我将在数据库中使用整数值,而不是具体化所有结果。