Tag: linq

用LINQ返回一个独特的IQueryable?

我正在编写一个函数,它使用LINQ从DataBase中获取记录以获得IQueryable。 此LINQ语句将在特定时间段内为活动用户提取所有记录,然后将UserID,First Name和Last Name吐出到Telerik RadGrid。 我的问题在于在拉动此数据时尝试在UserID上获得不同的值。 我已经尝试重新使用此代码来获取结果。 以下是拉动所有数据的代码示例,其中Distinct NOT工作。 public static IQueryable GetActiveEmployees_Grid(string Period) { DataContext Data = new DataContext(); var Employees = (from c in DataSystem_Records where c.Period == Period orderby c.DataSystem_Employees.LName select c).Distinct(); return Employees; } 将DataSource应用到我的网格后,这将返回用户4次,该句点的每个记录一个实例。 有没有办法将Distinct应用于我的LINQ函数,使其按照我打算的方式工作?

为什么IEnumerable慢,List快?

碰到了这段代码。 var dic = new Dictionary(); for(int i=0; i f.Value.StartsWith(“1”)).Select(f => f.Key);//.ToList(); //uncomment for fast results Console.WriteLine(list.GetType()); var list2 = dic.Where(f => list.Contains(f.Key)).ToList(); Console.WriteLine(list2.Count()) 所以当.ToList()被评论时它很慢,当没有时 – 它很快。 这里可再现如何解释? 我是否应该始终制作所有ToList()以确保速度(即在哪种情况下IEnumerable会更优选)? 注意我只是谈论对象的linq,我知道linq对sql懒惰和东西。

LINQ .Cast()扩展方法失败但(类型)对象有效

要在一些LINQ to SQL对象和DTO之间进行转换,我们在DTO上创建了显式的转换运算符。 这样我们就可以做到以下几点: DTOType MyDTO = (LinqToSQLType)MyLinq2SQLObj; 这很好用。 但是,当您尝试使用LINQ .Cast()扩展方法进行强制转换时,它会抛出一个无效的强制转换exception,表示无法将类型Linq2SQLType转换为类型为DTOType。 即以下不起作用 List Names = dbContact.tNames.Cast() .ToList(); 但以下工作正常: DAL.tName MyDalName = new DAL.tName(); DTO.Name MyDTOName = (DTO.Name)MyDalName; 以下也行得正常 List Names = dbContact.tNames.Select(name => (DTO.Name)name) .ToList(); 为什么.Cast()扩展方法会抛出无效的强制转换exception? 我过去曾多次使用.Cast()扩展方法,当你将类似基类型的类型转换为派生类型时,它可以正常工作,但是当对象有一个显式的强制转换操作符时,它就会失败。

为BindingListView 启用LINQ

Andrew Davies在sourceforge上创建了一个名为BindingListView的优秀小类,它基本上允许您将集合绑定到DataGridView同时支持排序和过滤。 将DataGridView绑定到普通List不支持排序和过滤,因为List没有实现正确的接口。 该类工作得很好,解决了我的UI问题。 但是,如果我可以使用LINQ迭代集合,那将是非常棒的,但我只是不确定如何设置它。 源代码可以在这里下载。 谁能帮我吗?

为什么我不能使用数组的枚举器,而不是自己实现它?

我有一些像这样的代码: public class EffectValues : IEnumerable { public object [ ] Values { get; set; } public IEnumerator GetEnumerator ( ) { return this.Values.GetEnumerator ( ); } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator ( ) { return this.GetEnumerator ( ); } } 但编译器抱怨说: “无法将类型’System.Collections.IEnumerator’隐式转换为’System.Collections.Generic.IEnumerator’。存在显式转换(您是否错过了转换?)” 我以为Array类型实现了IEnumerable接口,不是吗? 因为我可以直接在Values实例上使用Linqfunction。

C#dbml文件来自哪里?

我目前正在学习C#和LINQ。 我对他们有很多疑问。 基本上,我需要一步一步的教程。 我想dbml文件是数据库的配置文件。 如果我双击dbml文件,VS将在设计图中打开它。 我可以在这里创建/删除/修改表格吗? 我可以使用add new item来添加LINQ to SQL Classes来获取dbml文件? 下一步是什么? 在数据库中生成表? 生成SQL脚本? 生成cs文件? 什么时候? 怎么样?

附加到表达式

我按照这个主题: 链接文本 杰森给出了一个例子: public static Expression AndAlso(this Expression left, Expression right) { return Expression.Lambda(Expression.AndAlso(left, right), left.Parameters); } 及其用法如下: Expression<Func> clientWhere = c => true; if (filterByClientFName) { clientWhere = clientWhere.AndAlso(c => c.ClientFName == searchForClientFName); } if (filterByClientLName) { clientWhere = clientWhere.AndAlso(c => c.ClientLName == searchForClientLName); } 我有一个订单表,我按照上面的例子,更改列名,我得到了post创建者所具有的类似错误 二进制运算符AndAlso没有为类型’System.Func 2[Models.Order,System.Boolean]’ and ‘System.Func 2 [Models.Order,System.Boolean]’定义。 任何人都对我失踪的事有任何想法? 更新: […]

如何撰写现有的Linq表达式

我想编写两个Linq表达式的结果。 它们以forms存在 Expression<Func> 所以我想要编写的两个本质上是一个参数(类型为T)的委托,它们都返回一个布尔值。 我想要的结果是对布尔值的逻辑评价。 我可能会将它作为扩展方法实现,所以我的语法将是这样的: Expression<Func> expression1 = t => t.Name == “steve”; Expression<Func> expression2 = t => t.Age == 28; Expression<Func> composedExpression = expression1.And(expression2); 后来在我的代码中我想评估组合表达式 var user = new User(); bool evaluated = composedExpression.Compile().Invoke(user); 我用了几个不同的想法,但我担心它比我希望的更复杂。 这是怎么做到的?

LINQ查询执行投射,跳过或包装exception,其中源抛出IEnumerable.GetNext()

我想要一个通用的解决方案,但作为一个例子,假设我有一个IEnumerable ,其中一些可以解析为整数,有些则不能。 var strings = new string[] { “1”, “2”, “notint”, “3” }; 显然,如果我做了Select(s => int.Parse(s, temp))它会在枚举时抛出exception。 在这种情况下,我可以先.All(s => int.TryParse(s, out temp)) ,但我想要一个通用的解决方案,我不必枚举IEnumerable两次。 理想情况下,我希望能够执行以下操作,它调用我的魔术exception跳过方法: // eg parsing strings var strings = new string[] { “1”, “2”, “notint”, “3” }; var numbers = strings.Select(s => int.Parse(s)).SkipExceptions(); // eg encountering null object var objects = new object[] […]

如何在两个DataTable之间获得差异

我有这两个数据表,我想得到它们之间的区别。 这是一个例子: Table1 ————————- ID | Name ————————– 1 | A 2 | B 3 | C ————————– Table2 ————————- ID | Name ————————– 1 | A 2 | B ————————– 我只想将结果作为table1中的数据而不是table2中的数据(table1-table2) ResultTable ————————- ID | Name ————————– 3 | C ————————– 我尝试通过Linq使用这两个类似的解决方案,但它总是返回table1而不是table1-table2。 这是第一个解决方案: DataTable table1= ds.Tables[“table1”]; DataTable table2= ds.Tables[“table2”]; var diff= table1.AsEnumerable().Except(table2.AsEnumerable(),DataRowComparer.Default); 二解决方案: var […]