假设我有这个我希望得到第42组中的每个人,但我希望获得数据库中每个唯一名字的IQueryable(PS - 我知道我可以在Select之后调用AsQueryable()但这不是我的意思我有兴趣做 - 我希望数据库执行distinct,而不是程序):
MyEfContextContainer db = new MyEfContextContainer();
IQueryable<string> uniqueFirstNames =
db.People
.Where(x=> x.GroupId == 42)
.DistinctBy(c=> c.FirstName)
.Select(c=> c.FirstName);
Run Code Online (Sandbox Code Playgroud)
从我所知道的EF/LINQ to Entities如何处理DistinctBy扩展方法,调用DistinctBy时执行存储查询,并在数据库中找到与Where匹配的所有项目列表,然后C#从中返回IEnumberable DistinctBy方法匹配发送到DistinctBy的表达式.
如果列表中有数百万个名称,则效率非常低.
我有兴趣能够有效地执行此操作,希望通过使商店查询仅返回表中所有唯一FirstNames的结果集.例如,我可能希望将IQueryable作为存储库的一部分返回,因为性能原因不能通过DistinctBy抓取和处理数百万个项目来返回唯一值.这会将请求处理时间增加到不可接受的水平.
有没有办法做到这一点?我错过了什么吗?这只是一个简单的例子,显然在一个真实的应用程序中,比字符串更复杂的对象将是对存储库的查询主题.
我知道System.Security.Cryptography中存在SHA1和SHA256的实现.
有内置可以计算CRC哈希值的东西吗?
以下是我定义相同值的两种不同方式.我希望它作为64位(双精度)浮点数(也称为double)存在.
#define THISVALUE -0.148759f
double myDouble = -0.148759;
Run Code Online (Sandbox Code Playgroud)
如果我执行以下操作
double tryingIt = THISVALUE;
Run Code Online (Sandbox Code Playgroud)
我在调试期间查看值或打印它,我可以看到它分配tryingIt给-0.14875899255275726
我知道浮点数并不准确,但这只是一个疯狂的差异,真正抛弃了我的数学.直接在顶部代码块中分配double,在调试器中给出了-0.14875900000000000的值- 正是它应该是什么.
什么事情的想法?
在 SQL Management Studio 中,任何连接都有一个与其一起列出的应用程序......对于每个 EF 连接,我只说“EntityFramework”作为应用程序名称。我如何更改它以便我可以在此字段中实际输入应用程序的名称?
我知道这可以在单个属性上使用Fluent API来完成,但我希望在我的模型中使用.NET DateTime的任何地方都能自动执行此操作.以下是执行单个属性的示例:
modelBuilder.Entity<T>()
.Property(f => f.MyDateTimeProperty)
.HasColumnType("datetime2");
但是我不希望它只在这一个属性上自动发生.在Model First中有一个修复,通过编辑T4生成模板,所以我知道它可以在那里完成但我在Code First中需要相同的东西.