Tag: linq

如何检查对象是否已经存在于列表中

我有一个列表 List<MyObject> myList 我将项目添加到列表,我想检查该对象是否已经在列表中。 所以在我这样做之前: myList.Add(nextObject); 我想看看nextObject是否已经在列表中。 对象“MyObject”有一些属性,但比较是基于两个属性的匹配。 在添加一个新的“MyObject”到“MyObject”列表之前,做一个检查的最好方法是什么? 我认为唯一的解决scheme是从列表更改为一个字典,他们使关键字连接string的属性(这似乎有点不雅观) 任何其他更清洁的解决scheme使用列表或LINQ或其他?

访问成员expression式的值

如果我有一个产品。 var p = new Product { Price = 30 }; 我有以下linq查询。 var q = repo.Products().Where(x=>x.Price == p.Price).ToList() 在一个IQueryable提供程序中,我得到一个包含常量expression式的p.Price的MemberExpression,但是我似乎无法从中得到值“30”。 更新我已经尝试过,但它似乎并没有工作。 var memberExpression = (MemberExpression)GetRootConstantExpression(m); var fi = (PropertyInfo)memberExpression.Member; var val = fi.GetValue(((ConstantExpression)memberExpression.Expression).Value, null); 干杯。

我可以在LINQ中声明/使用一些variables吗? 或者我可以写下面的LINQ清除器?

我可以在LINQ中声明/使用一些variables吗? 例如,我可以写下面的LINQ清除器吗? var q = from PropertyDescriptor t in TypeDescriptor.GetProperties(instance) where (t.ComponentType.GetProperty(t.Name) != null) select t.ComponentType.GetProperty(t.Name); 有没有办法不写/在这里调用t.ComponentType.GetProperty(t.Name)两次?

什么时候应该处理数据上下文

我目前正在为应用程序编写一个数据访问层。 访问层大量使用linq类来返回数据。 目前为了将数据reflection回数据库,我添加了一个私有数据上下文成员和一个公共保存方法。 代码看起来像这样: private DataContext myDb; public static MyClass GetMyClassById(int id) { DataContext db = new DataContext(); MyClass result = (from item in db.MyClasss where item.id == id select item).Single(); result.myDb = db; return result; } public void Save() { db.SubmitChanges(); } 这是一个粗略的简化,但它提供了一般的想法。 有没有更好的方法来处理这种模式? 我应该实例化一个新的数据上下文,每次我想访问分贝?

为什么不支持C#静态类扩展方法?

我从这个问题中知道,扩展方法只能对类实例进行操作,而不能对静态类本身进行操作。 这意味着我不能扩展像Convert和Math这样有用的静态类。 我想知道的是,这是为什么呢? 从上面的链接中,有一些关于C#团队如何实现这种function的build议。 有没有支持的哲学理由? 例如,下面是为什么IEnumerable<T>没有内置的LINQ ForEach<T>扩展的基本原理 。

LINQ是否可以使用IEnumerable?

我有一个类实现IEnumerable ,但不实现IEnumerable<T> 。 我不能改变这个类,我不能用另一个类来代替它。 正如我从MSDN了解, 如果类实现IEnumerable<T>则可以使用LINQ 。 我试过使用instance.ToQueryable() ,但它仍然不启用LINQ方法。 我知道这个类可以包含只有一个types的实例,所以这个类可以实现IEnumerable<T> ,但是它没有。 那么我能做些什么来使用LINQexpression式来查询这个类?

优雅的方式来结合多个元素的集合?

说我有任意数量的集合,每个集合包含相同types的对象(例如, List<int> foo和List<int> bar )。 如果这些集合本身位于一个集合中(例如List<List<int>> ,则可以使用SelectMany将它们合并到一个集合中。 但是,如果这些集合不在同一个集合中,那么我的印象就是我必须编写如下的方法: public static IEnumerable<T> Combine<T>(params ICollection<T>[] toCombine) { return toCombine.SelectMany(x => x); } 然后我会这样叫: var combined = Combine(foo, bar); 有没有一个干净,优雅的方式来结合(任意数量)的集合,而无需编写像上面的Combine这样的实用程序方法? 看起来很简单,在LINQ中应该有办法做到,但也许不行。

将LINQ结果转换为ObservableCollection

事实上,这是一个LINQ的结果可能不是相关的问题,但无论如何我提到它 – 因为这是导致这个问题的上下文。 我运行一个LINQ查询。 结果是一个; IEnumerable<MyClass> 我想把结果放到一个ObservableCollection中; ObservableCollection<MyClass> 我该如何做这个演员? (无需运行IEnumerable并将元素复制到ObservableCollection)。 我注意到LINQ有几个To ..()函数,但它似乎没有帮助我这个演员..?

使用LINQ检查一个string是否至less有一个数字

我想知道什么最简单和最短的LINQ查询返回true如果一个string中包含任何数字字符。

从另一个列表IDsorting列表

我有一个像这样的标识符的列表: List<long> docIds = new List<long>() { 6, 1, 4, 7, 2 }; 莫罗夫,我有另一个<T>项目的列表,这是由上述ID代表。 List<T> docs = GetDocsFromDb(…) 我需要在这两个集合中保持相同的顺序,以便List<T>中的项目必须位于与第一个项目相同的位置(由于search引擎评分的原因)。 而这个过程不能在GetDocsFromDb()函数中完成。 如果有必要,可以将第二个列表更改为其他结构(例如Dictionary<long, T> ),但是我不想更改它。 有没有什么简单而有效的方法来做这个“取决于某些ID的定义”与LINQ?