相关疑难解决方法(0)

使用Entity Framework,最好使用.First()或.Take(1)作为"TOP 1"吗?

我们正在实现一些EF数据存储库,我们有一些查询包括 TOP 1

我已经阅读了许多建议使用.Take(1)
我正在审查的代码使用的帖子.First()

我知道这两个都会为对象赋值产生相同的结果,但它们是否实际上都解析为同一个查询?查询数据库时,它实际上是否同时TOP 1用于两个请求?或者他们会将查询完整地执行到可枚举中,然后只需获取集合中的第一个条目?

此外,如果我们使用.FirstOrDefault()那么为什么我们应该期待任何不同的行为?我知道,当使用一个IEnumerable,调用一个.First()在一个空的集合会抛出,但如果这实际上只更改查询包括TOP 1话,我应该会完全没有功能上的差异之间.First().FirstOrDefault()....对不对?

或者,是否有比这些Enumerable扩展更好的方法来执行查询TOP 1

sql linq ienumerable linq-to-objects entity-framework

38
推荐指数
2
解决办法
3万
查看次数

哪个更快:单个(谓词)或Where(谓词).单个()

这个答案引起的讨论让我很好奇.哪个更快:

someEnumerable.Single(predicate);
Run Code Online (Sandbox Code Playgroud)

要么

someEnumerable.Where(predicate).Single();
Run Code Online (Sandbox Code Playgroud)

毕竟,第一个更短,更简洁,似乎是专门建造的.

甚至ReSharper建议前者:

在此输入图像描述

我在上一篇文章中争论说,它们在功能上是相同的,并且应该具有非常相似的运行时.

.net c# linq

33
推荐指数
2
解决办法
3323
查看次数

如何根据IEqualityComparer <T>从列表中获取对象

Linq中的Compare方法允许您通过IEqualityComparer查找,但我找不到允许您通过同一个比较器检索项目的对应方法.

这真的是最好的方法吗?

MyItem myFinderItem = new MyItem(keyField1, keyField2);
if (myList.Contains(myFinderItem, new MyEqualityComparer()))
{
    MyItem myRealItem = myList.Single(item => new MyEqualityComparer().Equals(item , myFinderItem));
}
Run Code Online (Sandbox Code Playgroud)

(我正在通过调用Except Linq方法分享IEqualityComaprer的用法,我想维护一个单一来源进行相等比较)

编辑:我正在寻找具有签名的方法:

T Find<T>(T t, IEqualityComparer<T> comparer)
Run Code Online (Sandbox Code Playgroud)

编辑2:我想这很有效,它很时髦.但它太可怕了,永远不会用它 :(

myList.Intersect( new List<MyItem>{myFinderItem}, comparer).Single();
Run Code Online (Sandbox Code Playgroud)

c# linq

8
推荐指数
1
解决办法
3278
查看次数

从hashset中获取元素,其中hashset.Count == 1

如何从已知包含正好1个元素的hashset中获取元素?(没有迭代)

c#

7
推荐指数
1
解决办法
4515
查看次数

如何使用LINQ选择与id对应的名称

我有一个类 points.cs 有成员:

  public class Points
    {
        public int Id = 0;
        public string Name { get; set; }
    }


I have a list of these points like this `List<Points> list= new List<Points>();`
Run Code Online (Sandbox Code Playgroud)

现在这个列表对象包含数据:

列表:

 Id    Name
  1    abc
  2    def
  3    ghi
  4    jkl
Run Code Online (Sandbox Code Playgroud)

我要做的是使用列表对象中的 LINQ 查询获取与我的代码中提供的 ID 号相对应的名称。

我的尝试显然是错误的:

 string nameFetchedId=list.Select(Name).Where(obj=>obj.Id=2) //result returned will be "def"
Run Code Online (Sandbox Code Playgroud)

请纠正我,我不擅长 LINQ?

.net c# linq select where

0
推荐指数
1
解决办法
1万
查看次数

标签 统计

c# ×4

linq ×4

.net ×2

entity-framework ×1

ienumerable ×1

linq-to-objects ×1

select ×1

sql ×1

where ×1