FreeSql icon indicating copy to clipboard operation
FreeSql copied to clipboard

IEnumerable.GetEnumerator 是否有实现计划

Open wizcabbit opened this issue 4 years ago • 5 comments

Feature 特性

Extensions/FreeSql.Extensions.Linq/QueryableProvider.cs 中 IEnumerable.GetEnumerator 尚未实现,使得IEnumerable接口的实现实际不可用

简要描述原因

IEnumerable接口的实现实际不可用

使用场景

在ASP.NET等场景中,试图用FreeSql替换EntityFramework会需要用到这类接口的实现

wizcabbit avatar Dec 01 '21 00:12 wizcabbit

近期也在尝试这个,发现 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 avatar Dec 02 '21 03:12 hd2y

@hd2y https://github.com/dotnetcore/FreeSql/issues/644

luoyunchong avatar Dec 02 '21 03:12 luoyunchong

@hd2y #644

和这个例子没有关系的,追求的不是这个效果。因为 AsQueryable 依赖于 ISelect,所以看起来是支持 IQueryable 的功能,但是实际执行的结果是完全不一样的,一旦应用在项目中,会给团队里其他用 EF 的小伙伴造成困扰。

hd2y avatar Dec 02 '21 03:12 hd2y

Where会修改前面的值。

luoyunchong avatar Dec 02 '21 03:12 luoyunchong

Where会修改前面的值。

是的,我是在研究如何用 System.Linq.Dynamic.Core,但是因为这个问题暂时也搁置了。

https://github.com/dotnetcore/FreeSql/issues/782

hd2y avatar Dec 02 '21 03:12 hd2y