我正在使用三元运算符,但它具有很大的性能效率,是否存在解决效率低下的等效解决方案?
鉴于我们有两个列表,我们希望从使用linq的一个列表中选择:
var myList1 = new List<string>();
var myList2 = new List<string>();
var result =
myList1.Select(x => new {
Id = x,
Count = myList2.Count(y => y == x) == 0 ? "Not Found"
: myList2.Count(y => y == x).ToString()
});
现在使用三元运算符?:我在这里显示了linq表达式将首先检查计数是否为0并显示“Not Found”否则它将再次运行linq计数并显示结果。我的观点是它将运行linq查询两次,实际上它只需要存储值并在else中再次使用它。如果linq查询更大更复杂,这似乎非常低效。
我知道三元运算符只能用于简单的方程式,例如我&gt; 1? true:false但是在linq查询中有什么替代方法,因为我无法先存储该值以便再次使用。
更新
这是关于三元运算符的理论问题,因为如果条件适用,它需要运行相同的方程两次。当方程很大且复杂时,使用效率太高?
答案 0 :(得分:12)
我无法先存储该值以便再次使用
为什么不呢?你当然可以。
addObj()
答案 1 :(得分:7)
您也可以使用利用let子句的查询语法来执行此操作:
var result = from e in myList1
let count = myList2.Count(y => y == e)
select new { Count = count == 0 ? "Not Found" : count.ToString()};
答案 2 :(得分:1)
您可以将计数结果保存在变量中,因此myList1中的每一行都不会计数2次。 代码:
var myList1 = new List<string>();
var myList2 = new List<string>();
int counter = 0;
var result =
myList1.Select(x => new {
Id = x
Count = (counter = myList2.Count(y => y == x)) == 0 ? "Not Found" : counter.ToString()
});