IEnumerable.GetEnumerator 是否有实现计划
Feature 特性
Extensions/FreeSql.Extensions.Linq/QueryableProvider.cs 中 IEnumerable.GetEnumerator 尚未实现,使得IEnumerable接口的实现实际不可用
简要描述原因
IEnumerable接口的实现实际不可用
使用场景
在ASP.NET等场景中,试图用FreeSql替换EntityFramework会需要用到这类接口的实现
近期也在尝试这个,发现 ISelect 设计上的问题,有些进行不下去。用起来会和正常的 IQueryable 有些区别。
例如:
IFreeSql freeSql = new FreeSqlBuilder()
.UseConnectionString(DataType.Sqlite, "Data Source=:memory:;")
.UseAutoSyncStructure(true)
.Build();
freeSql.Aop.CurdBefore += (s, e) =>
{
e.Sql.Dump();
};
var sel = freeSql.Select<Student>();
sel.Where(t=>t.Id == 1).ToList();
sel.Where(t=>t.Id == 2).ToList();
期望结果:
-- sel.Where(t=>t.Id == 1).ToList();
SELECT a."Id", a."Name"
FROM "Student" a
WHERE (a."Id" = 1)
-- sel.Where(t=>t.Id == 2).ToList();
SELECT a."Id", a."Name"
FROM "Student" a
WHERE (a."Id" = 2)
实际:
-- sel.Where(t=>t.Id == 1).ToList();
SELECT a."Id", a."Name"
FROM "Student" a
WHERE (a."Id" = 1)
-- sel.Where(t=>t.Id == 2).ToList();
SELECT a."Id", a."Name"
FROM "Student" a
WHERE (a."Id" = 1) AND (a."Id" = 2)
https://github.com/hd2y/MySamples/commit/77b8c70005bb8ced3e7220f6d04bb8b1eb483f84
@hd2y https://github.com/dotnetcore/FreeSql/issues/644
@hd2y #644
和这个例子没有关系的,追求的不是这个效果。因为 AsQueryable 依赖于 ISelect,所以看起来是支持 IQueryable 的功能,但是实际执行的结果是完全不一样的,一旦应用在项目中,会给团队里其他用 EF 的小伙伴造成困扰。
Where会修改前面的值。
Where会修改前面的值。
是的,我是在研究如何用 System.Linq.Dynamic.Core,但是因为这个问题暂时也搁置了。
https://github.com/dotnetcore/FreeSql/issues/782