gpt4 book ai didi

c# - linq where call 是否减少了对我的数据库的调用(自定义构建)

转载 作者:太空宇宙 更新时间:2023-11-03 14:28:44 24 4
gpt4 key购买 nike

我有一个方法可以从我的数据库中获取行。它看起来像这样:

public static IEnumerable<Dictionary<string, object>> GetRowsIter()
{
_resultSet.ReadFirst();
do
{
var resultList = new Dictionary<string, object>();
for (int fieldIndex = 0; fieldIndex < _resultSet.FieldCount; fieldIndex++)
{

resultList.Add(_resultSet.GetName(fieldIndex),
_resultSet.GetValue(fieldIndex));
}
yield return resultList;
} while (_resultSet.ReadRelative(1));
yield break;
}

当我想返回所有行时,这非常有用。但有时我只想返回部分行。

我打算编写自己的方法 (GetRowsIterWhere(string column, object whereValue)),但我想知道我是否可以在我的方法中使用 linq where。

我承认我不知道它是如何工作的,因为我正在使用 ReadRelative(1) 推进阅读器以获得下一个值。所以即使它“认为”它正在跳过行,它也不会真的跳过它们。

我真的很关心这里的性能(我目前正在从 Linq-To-Datasets 重构,因为它太慢了。)

所以,我的问题是,我是否需要编写自己的 Where 类型方法,或者我是否可以更改上面的方法以使用 linq where 方法?

最佳答案

是的,您可以使用 LINQ Where,但您需要自己构建谓词。这并不棘手。类似的东西(来自内存;没有编译器):

var param = Expression.Parameter(typeof(T), "row");
var body = Expression.Equal(
Expression.PropertyOrField(param, column),
Expression.Constant(whereValue));
var lambda = Expression.Lambda<Func<T,bool>>(body, param);

然后:

IQueryable<T> source = ...
var filtered = source.Where(lambda);

这将导致 Where 在服务器上执行(例如,在 TSQL 中),移除大部分网络 IO(假定一个合理的过滤器)。

关于c# - linq where call 是否减少了对我的数据库的调用(自定义构建),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3182384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com