Tag: linq

将多类型OrderBy表达式存储为属性

在一个通用的抽象基类中,我存储了几个用于排序的表达式: public Expression<Func> OrderByString { get; set; } public Expression<Func> OrderByInt { get; set; } 稍后将在通用基类中使用: if (OrderByString != null) { results = results.OrderBy(OrderByString); } else if (OrderByInt != null) { results = results.OrderBy(OrderByInt); } 最后,其中一个将在派生具体类的构造函数中设置: this.OrderByString = c => c.CustomerID; 我不喜欢我需要基于我想要OrderBy的属性类型的单独表达式这一事实。 ToString将无法在属性上运行,因为LINQ to Entities不支持它。 我所追求的是一种存储表达式的方法,该表达式选择任何要按顺序排列的属性,而不管类型如何。 如果我尝试一些更通用的东西,例如: public Expression<Func> Order { get; set; } 无法将类型’System.Int32’强制转换为’System.Object’。 […]

如何在linq中使用方法

我有课程: class SomeClass { public string Name{get;set;} public int SomeInt{get;set;} } class SomeComparison: IEqualityComparer { public bool Equals(SomeClass s, SomeClass d) { return s.Name == d.Name; } public int GetHashCode(SomeClass a) { return (a.Name.GetHashCode() * 251); } } 我还有两个名为list1和list2大型List 在我以前有: var q = (from a in list1 from b in list2 where a.Name != b.Name […]

从c#中的WebApi OData(EF)响应中排除属性

我正在使用C#的WebApi项目(EF代码优先),我正在使用OData。 我有一个“用户”模型,包含Id,Name,LastName,Email和Password。 在控制器例如我有这个代码: // GET: odata/Users [EnableQuery] public IQueryable GetUsers() { return db.Users; } 如果我调用/ odata / Users,我将获得所有数据:Id,Name,LastName,Email和Password。 如何从结果中排除密码,但在控制器中保持可用以进行Linq查询?

为什么OfType 比Cast 更快?

回答以下问题: 如何将MatchCollection转换为字符串数组 鉴于两个Linq表达式: var arr = Regex.Matches(strText, @”\b[A-Za-z-‘]+\b”) .OfType() //OfType .Select(m => m.Groups[0].Value) .ToArray(); 和 var arr = Regex.Matches(strText, @”\b[A-Za-z-‘]+\b”) .Cast() //Cast .Select(m => m.Groups[0].Value) .ToArray(); OfType 由用户Alex进行基准测试,稍微快一些(并由我自己确认)。 这对我来说似乎违反直觉,因为我认为OfType 必须同时进行’is’比较和 cast(T)。 任何启示将被赞赏为什么这是这种情况:)

从字符串创建lambda表达式

可能重复: 有一种简单的方法可以将(lambda表达式)字符串解析为Action委托吗? 我想将lambda表达式存储为配置文件中的字符串,并在运行时将这些字符串动态加载到C#中的lambda表达式中。 我的目标是配置和注入规则。 任何可用于从字符串创建lambda表达式的实用程序? 对于同一目标,还有其他轻量级解决方案吗?

如何将PropertyInfo转换为属性表达式并使用它来调用generics方法?

如何将PropertyInfo转换为属性表达式,可用于调用StructuralTypeConfiguration.Ignore(Expression<Func> propertyExpression)方法? 我尝试使用Expression.Property()来构造表达式,但是当我将此表达式用作propertyExpression参数时,我收到以下错误: The type arguments for method cannot be inferred from the usage. Try specifying the type arguments explicitly. 此错误可能是指TProperty类型参数,我不知道如何指定只有PropertyInfo 。 我这样做是关于: 使用entity framework的StructuralTypeConfiguration.Ignore()忽略所有属性,但指定set 。 UPDATE 代码不起作用: var propertyInfo = typeof(Foo).GetProperties()[0]; var expression = Expression.Default(typeof(Foo)); var expressionProperty = Expression.Property(expression, propertyInfo); Ignore(expressionProperty);

使用LINQ获取列表中的所有对

如何获取列表中所有可能的项目对(顺序不相关)? 例如,如果我有 var list = { 1, 2, 3, 4 }; 我想得到这些元组: var pairs = { new Tuple(1, 2), new Tuple(1, 3), new Tuple(1, 4), new Tuple(2, 3), new Tuple(2, 4) new Tuple(3, 4) }

如何附加到表达式

根据我昨天提出的问题 : 如果我必须附加到我现有的’where’表达式,我将如何追加? Expression<Func> clientWhere = c => true; if (filterByClientFName) { clientWhere = c => c.ClientFName == searchForClientFName; } if (filterByClientLName) { clientWhere = c => c.ClientLName == searchForClientLName; } 用户可以输入名字或姓氏或两者。 如果他们同时输入我想附加到表达式。 试着看看在我能做的地方是否有相应的附加物 clientWhere.Append or clientWhere += add new expression 或类似的东西

如何撰写Linq表达式? 即Func <Exp <Func >,Exp <Func >,Exp <Func >>

我正在创建一个Validator类。 我正在尝试为我的validation器实现Linq SelectMany扩展方法,以便能够使用Linq查询组合表达式,并在基础值发生更改时validation最终结果。 以下测试代码演示了我的意图。 var a = 2; var b = 3; var va = Validator.Create(() => a, n => n >= 0 && n b, n => n >= 0 && n < 5); var vc = from ia in va from ib in vb select ia + ib; Debug.Assert(vc.Value == a + b); […]

如何在LINQ to Entities中执行SQL“Where存在”?

我真的想做这样的事情: Select * from A join B on A.key = B.key join C on B.key = C.key — propagated keys where exists (select null from B where A.key = B.key and B.Name = “Joe”) and exists (select null from C where B.key = C.key and C.Name = “Kim”) 使用Entity Framework 4和C#时,linq语句会是什么样子? 更新: 显然.Contains()将产生“Where Exists”结果。 所以,另一种尝试 […]