Tag: linq

在返回IEnumerable <T>的方法中使用IDisposable对象

想象一下,你有一个内部使用IDisposable对象的方法(例如streamreader),yield从文件中读取返回的项目。 喜欢这个: public IEnumerable<YourObject> Read(string filename) { using(var filestream = new FileStream(filename, FileMode.Open)) { using(var reader = new StreamReader(filestream)) { string line; while((line = reader.ReadLine()) != null) { yield return new YourObject(line); } } } } 当我使用不迭代完整集合的LINQ方法时, reader和文件filestream会被处理吗? YourOjbect firstLine = Read("myfile.txt").First();

究竟是什么PLINQ?

在.NET 4.0框架中添加了PLINQ,作为对LINQ的扩展。 它是什么? 它解决了什么问题? 什么时候适合,什么时候不适合?

如何在Linq中完成一个完整的外连接?

我已经inheritance了一个没有完全devise的数据库,我需要操纵一些数据。 让我举一个比较常见的比喻来说明我所要做的事: 比方说,我们有一个Student表,一个StudentClass表,logging他所有的class级logging,还有一个StudentTeacher表,存储所有教这个学生的老师。 是的,我知道这是一个愚蠢的devise,将老师存放在class级表上会更有意义 – 但这就是我们正在处理的事情。 我现在想清理这些数据,我想find一个学生有一个老师,但没有class级,或一个class级,但没有老师的地方。 SQL因此: select * from StudentClass sc full outer join StudentTeacher st on st.StudentID = sc.StudentID where st.id is null or sc.id is null 你在Linq怎么做?

LINQ:结合连接和分组

我有一个查询,结合了一个连接和一个组,但我有一个问题。 查询如下所示: var result = from p in Products join bp in BaseProducts on p.BaseProductId equals bp.Id group p by p.SomeId into pg select new ProductPriceMinMax { SomeId = pg.FirstOrDefault().SomeId, CountryCode = pg.FirstOrDefault().CountryCode, MinPrice = pg.Min(m => m.Price), MaxPrice = pg.Max(m => m.Price), BaseProductName = bp.Name <—— can't use bp. }; 如您所见,它将Products表与BaseProducts表连接起来,并将其分组在Product表的id上。 但在生成的ProductPriceMinMax中,我还需要BaseProducts表的一个属性:bp.Name,但它不知道bp。 任何想法我做错了什么? 谢谢!

如何从一个List <int>与LINQ获得最接近的数字?

如何从一个List<int>与LINQ获得最接近的数字? 例如: List<int> numbers = new List<int>(); numbers.Add(2); numbers.Add(5); numbers.Add(7); numbers.Add(10) 我需要find列表中最接近的数字9,在这种情况下10。 我怎样才能做到这一点与LINQ?

dynamicLINQ可以注入吗?

使用dynamicLINQ库( 链接 ),是否容易注入? (如果是的话)如何防范呢? 安全考虑(entity framework)的一些背景: LINQ to Entities注入攻击: 尽pipe查询组合在LINQ to Entities中是可能的,但它是通过对象模型API执行的。 与实体SQL查询不同,LINQ to Entities查询不是使用string操作或串联组成的,而且它们不易受传统SQL注入攻击的影响。 由于dynamicSQL是使用string组成的,这是否意味着它可能容易受到注入向量? 或者,LINQ to SQL会根据Dynamic LINQ库中的基础数据types自动处理参数化值? 或者它是完全安全的,因为dynamic查询将在内存中执行,而不是针对SQL(从而否定SQL索引的好处)? 我一直在通过理解DynamicLibrary.cs代码,但我相信我可以轻松地忽略一些东西。 由于这个问题是关于dynamicLINQ库本身,这个问题可以被认为适用于linq-to-sql和linq-to-entities (尽pipe上面引用了entity framework)。

Resharper:可能的IEnumerable的多个枚举

我正在使用新的Resharper版本6.在我的代码中的几个地方,它已经强调了一些文本,并警告我可能会有一个可能的IEnumerable多个枚举 。 我理解这意味着什么,并在适当的时候采纳了build议,但在某些情况下,我不确定这实际上是一个大问题。 像下面的代码一样: var properties = Context.ObjectStateManager.GetObjectStateEntry(this).GetModifiedProperties(); if (properties.Contains("Property1") || properties.Contains("Property2") || properties.Contains("Property3")) { … } 它强调每一个提到的properties在第二行,警告我多次枚举这个IEnumerable。 如果将.ToList()添加到第1行的末尾(将properties从IEnumerable<string>转换为List<string> ),则警告消失。 但是,如果将其转换为List,那么它将枚举整个IEnumerable来首先构buildList,然后根据需要枚举List以查找属性(即1个完全枚举和3个部分枚举)。 而在我原来的代码中,只做了3个部分枚举。 我错了吗? 这里最好的方法是什么?

如何将expression式树转换为部分SQL查询?

当EF或LINQ to SQL运行查询时,它: 从代码构buildexpression式树, 将expression式树转换为SQL查询, 执行查询,从数据库获取原始结果并将其转换为应用程序使用的结果。 看着堆栈跟踪,我不知道第二部分发生在哪里。 一般来说,是否可以使用EF或(最好是)LINQ to SQL的一个现有部分将Expression对象转换为部分SQL查询(使用Transact-SQL语法),或者我必须重新发明轮子? 更新:评论要求提供我想要做的一个例子。 其实, 下面Ryan Wright的回答完全说明了我想要达到的结果,除了我的问题是关于如何使用EF和LINQ to SQL实际使用的.NET Framework的现有机制来实现的 ,而不必重新发明轮子,并自己写成千行的未经过testing的代码来做类似的事情。 这也是一个例子。 再一次请注意,没有ORM生成的代码。 private class Product { [DatabaseMapping("ProductId")] public int Id { get; set; } [DatabaseMapping("Price")] public int PriceInCents { get; set; } } private string Convert(Expression expression) { // Some magic calls to .NET Framework code happen […]

我误解LINQ to SQL .AsEnumerable()?

考虑这个代码: var query = db.Table .Where(t => SomeCondition(t)) .AsEnumerable(); int recordCount = query.Count(); int totalSomeNumber = query.Sum(); decimal average = query.Average(); 假设query需要很长时间才能运行。 我需要得到logging数,总SomeNumber返回,并在最后取平均值。 我想基于我的阅读.AsEnumerable()将使用LINQ到SQL执行查询,然后使用LINQ到对象的Count , Sum Average 。 相反,当我在LINQPad中这样做时,我看到相同的查询运行了三次。 如果我用.AsEnumerable()replace.ToList() ,它只会被查询一次。 我错过了什么AsEnumerable什么?

Directory.GetFiles的某些扩展

有没有办法简化这个linqexpression式,还是有更好的方法呢? Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories) .Where(s => s.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase) || s.EndsWith(".gif", StringComparison.OrdinalIgnoreCase) || s.EndsWith(".png", StringComparison.OrdinalIgnoreCase) || …); 基本上我想返回一个特定扩展名的所有文件。 不幸的是,这种方法不是很灵活。 我宁愿能够向列表添加扩展,并让Directory.GetFiles返回这些扩展。 那可能吗?