相关疑难解决方法(0)

LINQ性能计数vs Where和Count

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)

c# linq

29
推荐指数
2
解决办法
3755
查看次数

连接语句中的条件的Lambda

我必须Employee根据他们进行过滤department。我可以使用LINQ进行相同的操作。

Linqlambda编译以得到相同的结果。编译器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)

c# linq lambda

2
推荐指数
1
解决办法
3531
查看次数

C#三元运算符?:效率

我正在使用三元运算符,但它具有很大的性能效率低下是否有一个等效的解决方案来解决效率问题?

鉴于我们有两个列表,我们希望从一个使用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查询中有什么替代方法,因为我无法再次存储该值以再次使用.

更新:

这是关于三元运算符的理论问题,因为如果条件适用,它需要运行相同的方程两次.方程式大而复杂时使用效率太高?

c# linq ternary-operator

0
推荐指数
2
解决办法
1152
查看次数

标签 统计

c# ×3

linq ×3

lambda ×1

ternary-operator ×1