C# 使用具有空返回值的LINQ let
我正在尝试在LINQ as中执行一个方法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
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查询更改的解决方法?您正在从数据库中选择一个结果。这就是你指的模型吗?一旦你选择了它,你就把它转换成一个匿名类型,它是新的{..}部分。我的回答与你原来的解决方案具有相同的效果。我看不到你的问题有任何更新。。。