public class Group
{
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
测试:
List<Group> _groups = new List<Group>();
for (int i = 0; i < 10000; i++)
{
var group = new Group();
group.Name = i + "asdasdasd";
_groups.Add(group);
}
Stopwatch _stopwatch2 = new Stopwatch();
_stopwatch2.Start();
foreach (var group in _groups)
{
var count = _groups.Count(x => x.Name == group.Name);
}
_stopwatch2.Stop();
Console.WriteLine(_stopwatch2.ElapsedMilliseconds);
Stopwatch _stopwatch = new Stopwatch();
_stopwatch.Start();
foreach (var group in _groups)
{
var count = _groups.Where(x => …Run Code Online (Sandbox Code Playgroud) 我必须Employee根据他们进行过滤department。我可以使用LINQ进行相同的操作。
Linq并lambda编译以得到相同的结果。编译器Lambda expression在编译之前将查询表达式更改为等效表达式,因此生成的IL完全相同。资源
var deptCollection = new List<Dept>();
var employeeCollection = new List<Employee>();
employeeCollection.Add(new Employee { Id = 1, Name = "Eldho" });
deptCollection.Add(new Dept { DepetarmentName = "a", EmployeeId = 3 });
deptCollection.Add(new Dept { DepetarmentName = "a", EmployeeId = 1 });
var empinadept = (from e in employeeCollection
from dep in deptCollection
where e.Id == dep.EmployeeId
&& dep.DepetarmentName == "a"
select e)
.ToList();
Run Code Online (Sandbox Code Playgroud)
我无法
.Where在此Lambda中添加子句
var empindeptLamda …Run Code Online (Sandbox Code Playgroud) 我正在使用三元运算符,但它具有很大的性能效率低下是否有一个等效的解决方案来解决效率问题?
鉴于我们有两个列表,我们希望从一个使用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()
});
Run Code Online (Sandbox Code Playgroud)
现在使用三元运算符?:我在这里显示了linq表达式将检查计数是否为0并显示"未找到"否则它将再次运行linq计数并显示结果.我的观点是它将运行linq查询两次,实际上它只需要存储值并在else中再次使用它.如果linq查询更大更复杂,这似乎非常低效.
我知道三元运算符只应用于简单的方程式,例如i> 1?true:false但是在linq查询中有什么替代方法,因为我无法再次存储该值以再次使用.
更新:
这是关于三元运算符的理论问题,因为如果条件适用,它需要运行相同的方程两次.方程式大而复杂时使用效率太高?