Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.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# 实体框架中如何从可空关系中选择非可空_C#_Entity Framework_Dynamic Linq - Fatal编程技术网

C# 实体框架中如何从可空关系中选择非可空

C# 实体框架中如何从可空关系中选择非可空,c#,entity-framework,dynamic-linq,C#,Entity Framework,Dynamic Linq,我正在制作一个基于实体框架和Scott Guthrie的动态Linq库的报告工具 当相关记录不总是存在时,我尝试从相关表中选择不可为空的字段时遇到了一个障碍。例如,我有一个参与者表,它的团队表外键可以为空。这是因为一些参与者将加入一个团队,而另一些则不会。问题是,我想拉一份报告,其中显示参与者列表以及他们的一些团队信息(如果他们在团队中)。团队表上的一列不可为null,因此当我尝试使用标准投影或动态投影选择它时: var standardProjection = data.Select(

我正在制作一个基于实体框架和Scott Guthrie的动态Linq库的报告工具

当相关记录不总是存在时,我尝试从相关表中选择不可为空的字段时遇到了一个障碍。例如,我有一个参与者表,它的团队表外键可以为空。这是因为一些参与者将加入一个团队,而另一些则不会。问题是,我想拉一份报告,其中显示参与者列表以及他们的一些团队信息(如果他们在团队中)。团队表上的一列不可为null,因此当我尝试使用标准投影或动态投影选择它时:

    var standardProjection = data.Select(i => new
    {
        i.FirstName,
        i.ParticipantTeam.CaptainPickupFlg <--- Non Nullable Boolean
    });

    var dynamicProjection = data.Select("new (FirstName, ParticipantTeam.CaptainPickupFlg)");
var-standardProjection=data.选择(i=>new
{
i、 名字,
i、 ParticipantTeam.CaptainPickupFlg
如果您需要所有参与者,您有两个选择:

  • 如果您可以在返回的匿名类型中提供可为空的字段:

    var standardProjection = data.Select(i => new
    {
        i.FirstName,
        CaptainPickupFlg = (bool?)i.ParticipantTeam.CaptainPickupFlg
    });
    
  • 如果这不是您的选项,您应该决定该字段的默认值:

    var standardProjection = data.Select(i => new
    {
        i.FirstName,
        CaptainPickupFlg = ((bool?)i.ParticipantTeam.CaptainPickupFlg) ?? false
    });
    
    其默认值为
    false


我不想把它们过滤掉,因为我仍然希望所有参与者都能显示出来。@Bell先生那么,如果一个参与者没有ParticipantTeam,你希望返回结果的
CaptainPickupFlg
字段中有什么内容?是真是假?你知道如何在动态linq表达式中做同样的事情吗?@MrBell:试试这个:
数据。选择(“新建”)(名字,bool?(参与者团队。CaptainPickupFlg)作为CaptainPickupFlg)”;
我还没有测试它。请测试并将结果通知我。这是否回答了您的问题?
var standardProjection = data.Select(i => new
{
    i.FirstName,
    CaptainPickupFlg = ((bool?)i.ParticipantTeam.CaptainPickupFlg) ?? false
});