- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 DAL 中有一个供应方法:
public IEnumerable<RecordType> GetRecords()
{
using (LinqDataContext context = new LinqDataContext())
{
var records = context.RecordTable;
foreach (RecordType record in records)
{
yield return record;
}
}
}
消费者方法在 foreach
循环中使用记录。这样我想通过不缓存 RecordTable
中的所有记录来节省内存使用量,因为 LinqToSql 在后台使用 DataReader。
虽然我对这种情况有两个问题:
上面的 yield-return 真的比将所有记录缓存到一个数组 (.ToArray()) 更节省资源并且工作速度更快吗?
如果消费方法的 foreach
循环内发生错误,数据连接是否会自动正确关闭(我指的是 using
语句)或者如果消费方法会在中间中断 foreach
循环(比如找到所需的记录并 break
)?
最佳答案
在执行基本查询的情况下,它可以那样工作(当然是可能的)- 然而,在查询裸Table<T>
的情况下,它可能是它首先缓冲;您也许可以尝试在迭代期间查询计数,或运行跟踪。在这种情况下,我怀疑它会先缓冲。
重新关闭:这也取决于 ;p 如果有人正在使用 foreach
, 然后是:因为 foreach
通过 finally
显式处理迭代器.然而!不保证有人这样做,例如(非常顽皮和松懈):
var iter = yourData.GetEnumerator();
if(iter.MoveNext()) {
Console.WriteLine(iter.Current.Name); // first record of, say, 20
}
// and don't dispose the iterator == bad
那么由于迭代器没有 a: 被处置,b: 耗尽自身,并且 c: 没有崩溃,它不会正常关闭(这 3 个条件中的任何一个都会关闭它正确)。强调:这是一个病态的案例:通常说“它会关闭,是的”是相当安全的。
如果你想要保证非缓冲,注意“dapper”有这个,如果你设置buffered
至 false
:
IEnumerable<Customer> customers = connection.Query<Customer>(
"select * from Customer", buffered: false);
(它还可以处理参数等)
关于c# - 使用 LinqToSql 生成返回数据库记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45373608/
// goal: update Address record identified by "id", with new data in "colVal" string cstr = Connectio
在 ADO.Net/SQLClient 中我经常会做这样的事情: SELECT COUNT(*) FROM SomeTable WHERE SomeKey = 1234 ...并使用 executes
我有 3 个类(class): BasePlace、Hall、HallPlan。 关系: BasePlace - Hall:一对多。 Hall - HallPlan:一对多。 我从远程程序中获取地点(
假设我有一个包含 DateTime 字段和一个 int 字段的表并执行如下查询: var query = context.tblSomeTable.Where(s=>s.Name == "Hello
我有一个使用多个连接运行的 LINQ 查询,我想将它作为 IQueryable 传递并在其他方法中应用额外的过滤器。 问题是我不知道如何传递 var数据类型并保持强类型,如果我尝试将其放入我自己的类中
我有一个问题。如果我使用的是 LinqToSql,我的程序会将我的数据库加载到内存中。小例子: //pageNumber = 1; pageSize = 100;
我有以下代码: var tagToPosts = (from t2p in dataContext.TagToPosts joi
我喜欢 LinqToSql 数据上下文对象和底层 SQL 数据库之间的紧密耦合,但我很好奇混淆是如何融入画面的。 [global::System.Data.Linq.Mapping.ColumnAtt
在您将其标记为重复之前,我进行了广泛的搜索,但没有提供我的答案。我看过了 Recursive select via LINQ?和 linq to sql recursive query和 http:/
这可能已经有人问过,但我找不到,所以就到这里吧。 我们有一个表的通用读取,使用 Context.GetTable( ) 然后附加一个表达式来查找表中的单个记录。该表具有关联。不幸的是,我们正在尝试更改
我在使用 LinqToSQL 时无法将连接字符串初始化为文本文件。 我正在尝试使用以下连接字符串创建 DataContext: Provider=Microsoft.Jet.OLEDB.4.0;Dat
这里有一些 LinqToSql 问题: // Returns the number of counties in a state, // or all counties in the USA if t
我正在查看 LINQPad 提供的样本 LINQ 查询,这些查询取自 Nutshell 书中的 C# 4.0,并遇到了一些我从未在 LINQ to SQL 中使用过的东西...编译查询。 这是确切的例
我有一些 linq 实体继承了这样的东西: public abstract class EntityBase { public int Identifier { get; } } public int
有没有办法使用 LINQToSQL 从表中返回随机行? 最佳答案 是的,在表的计数范围内生成一个随机数,然后 Skip() 该数字,Take(1) 然后返回结果序列的第一个元素。有点像 var R =
我刚刚开始使用 LinqToSql 创建我的数据访问层。每个人都在谈论很酷的语法,我真的很喜欢 Linq。 但是当我看到如果你在 LinqContext 上拖动一些表时你的类是如何生成的,我很惊讶:这
我有以下形式的数据设置:State 1->n County 1->n City。 在我的 State 对象中,我想要返回至少包含一个人口大于 p 的城市的所有县。如果我用 sql 写这个,它会是: s
我是 LINQtoSQL 的新手。我选择学习它是因为我没有太多用 SQL 编写存储过程的经验,并且认为 LINQtoSQL 可能是进行数据访问的另一种方法。不管怎样,我创建了一个简单的 ASP.NET
我需要执行此 Sql 命令(在管理工作室中运行良好): select * from Users where Login = 'test' and PasswordHash = HashBytes('S
有没有一种方法可以分析 LinqToSql,以便我可以看到查询在数据库中花费了多长时间,以及映射到对象需要多长时间? 据我从 SQL Profiler 判断,我的查询速度快如闪电,但应用程序端的调用速
我是一名优秀的程序员,十分优秀!