Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.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 let_C#_.net_Asp.net Mvc_Linq_Let - Fatal编程技术网

C# 使用具有空返回值的LINQ let

C# 使用具有空返回值的LINQ let,c#,.net,asp.net-mvc,linq,let,C#,.net,Asp.net Mvc,Linq,Let,我正在尝试在LINQ as中执行一个方法 var result = from fruit in fruits let type = GetType(fruit) select new { fruit = fruit, type = type != null ? type.Name : "N/A" }; FruitType GetType(Fruit

我正在尝试在LINQ as中执行一个方法

var result = from fruit in fruits
             let type = GetType(fruit)
             select new {
                 fruit = fruit,
                 type = type != null ? type.Name : "N/A"
             };

FruitType GetType(Fruit fruit)
{
    if (fruit == a)
      return TypeA;
    else 
      return null;
}
这会引发错误,因为:如果结果为null,则let不允许访问type.Name,即使它是在非null检查之后


有解决方法吗?

为什么不返回一个默认值而不是null

FruitType GetType(Fruit fruit)
{
    if(fruit == a)
        return TypeA;
    return new FruitType {Name = "N/A"};
}
然后您的查询变成

var result = from fruit in fruits
             let type = Gettype(fruit)
             select new {
                 fruit = fruit,
                 type = type.Name
             };

为什么不返回一个默认值而不是null

FruitType GetType(Fruit fruit)
{
    if(fruit == a)
        return TypeA;
    return new FruitType {Name = "N/A"};
}
然后您的查询变成

var result = from fruit in fruits
             let type = Gettype(fruit)
             select new {
                 fruit = fruit,
                 type = type.Name
             };

你能发一封信吗?另外,请发布实际的错误消息和异常类型。这是EF还是Linq到对象?我认为您发布的代码不能准确地表示您遇到问题的代码。我创建了一个小提琴来表示上面的代码,它工作得很好。你也可以只做type=GetTypefruit?.Name??不适用如果您使用的是c6thanks@EricLippert,那么它是一个伪代码:dca您可以发布一个吗?另外,请发布实际的错误消息和异常类型。这是EF还是Linq到对象?我认为您发布的代码不能准确地表示您遇到问题的代码。我创建了一个小提琴来表示上面的代码,它工作得很好。你也可以只做type=GetTypefruit?.Name??不适用如果您使用的是c6thanks@EricLippert,那么它是一个伪代码:DThanks,我理解这应该可以工作,但是在我的场景中,我返回一个Model db表,我不能使用新的默认类型,因为它将在表中创建一个条目。任何其他可能涉及linq查询更改的解决方法?您正在从数据库中选择一个结果。这就是你指的模型吗?一旦你选择了它,你就把它转换成一个匿名类型,它是新的{..}部分。我的回答与你原来的解决方案具有相同的效果。在您的问题中,我没有看到任何更新…谢谢,我理解这应该是可行的,但是在我的场景中,我返回一个Model db表,我不能使用新的默认类型,因为它将在表中创建一个条目。任何其他可能涉及linq查询更改的解决方法?您正在从数据库中选择一个结果。这就是你指的模型吗?一旦你选择了它,你就把它转换成一个匿名类型,它是新的{..}部分。我的回答与你原来的解决方案具有相同的效果。我看不到你的问题有任何更新。。。