Tag: 表达式

“System.DateTime”类型的表达式不能用于返回类型“System.Object”

我创建了一个表达式,我正在使用它进行排序工作正常,直到我点击DateTime字段,我得到以下错误(在第二行): “System.DateTime”类型的表达式不能用于返回类型“System.Object” 这是我的代码: ParameterExpression param = Expression.Parameter(typeof(MyEntity), “x”); Expression<Func> sortExpression = Expression.Lambda<Func>( Expression.Property(param, sortKey), param); 任何人都可以帮忙吗?

将两个lambda表达式与内部表达式结合使用

我有下一个类结构: public class Order { public User User { get; set; } public string Name { get; set; } } public class Authentication { public string Email { get; set; } } public class User { public string Name { get; set; } public List Auths { get; set; } } 我正在尝试在运行时构建一个表达式,以按User.Name,Order.Name或User.Auths.Email搜索实体 我试图结合三种表达方式: Expression<Func> usernameExpression […]

使用Dynamic Expression API选择匿名类型

我正在使用带有LINQ to Entities的动态表达式API( System.Linq.Dynamic )。 我的LINQ查询如下。 var query = this.db.Products.AsQueryable() .Where(strCondition) .OrderBy(“ProductNumber”) .Select(“new(ProductNumber, ProductDescription, ProductCategory.Name)”); 现在我有了“查询”,我不知道如何获得每个字段的值。 string strTemp; foreach (var item in query) { strTemp = item.? } 它是匿名类型,所以我不能真正使用强类型来获取值。 我能做什么? 我选择获取匿名类型字段的原因是因为我需要将ProductCategory.Name字段放入结果中。 有没有更好的方法在Dynamic Expression API的结果中获取ProductCategory.Name? 有人可以帮忙吗?

如何声明Linq表达式变量以使其作为dbParameter处理

我正在尝试针对Entity框架(或其他Linq提供程序)创建动态查询。 让我用一些示例代码解释我的问题。 如果我硬编码表达式: var id = 12345; Expression<Func> myLambda = (s) => s.Id == id; var finalQuery = context.ItemSearch.Where(myLambda); this.Log((finalQuery as ObjectQuery).ToTraceString()); 生成的SQL如下所示: SELECT … FROM ViewItemSearch “Extent1” WHERE “Extent1”.ID = :p__linq__0 一个很好的:p__linq__0 dbParameter。 如果我创建一个表达式: var id = 12345; ParameterExpression param = Expression.Parameter(typeof(ItemSearch), “s”); Expression prop = Expression.Property(param, “Id”); Expression val = Expression.Constant(id); Expression searchExpr […]

Linq表达式如何确定平等?

我正在考虑使用Linq Expression作为字典中的键。 但是,我担心我会得到奇怪的结果,因为我不知道Linq表达式如何确定Equality。 派生自Expression的类是否比较值相等或引用相等? 或者换句话说, Expression<Func> first = () => new object(); Expression<Func> second = ()=>new object(); bool AreTheyEqual = first == second;

如何将Func 隐式转换为Expression <Func >?

我不明白这里发生了什么: 这两行都编译: Func func = () => new object(); Expression<Func> expression = ()=>new object(); 但这不是: expression = func; LambdaExpression或Expression没有将委托转换为Expression的隐式运算符,因此必须进行其他操作才能使赋值工作。 它是什么?

Expression.PropertyOrField可以用来访问静态属性或字段吗?

Expression.PropertyOrField的expression参数的文档声明它对于静态成员可以为null : 一个Expression,其Type包含名为propertyOrFieldName的属性或字段。 静态成员可以为null 。 (强调我的) 但是,每当我传递null我都会得到一个ArgumentNullException 。

通过MemberExpression获取属性类型

我在这里问类似的问题,假设这种类型: public class Product { public string Name { get; set; } public string Title { get; set; } public string Category { get; set; } public bool IsAllowed { get; set; } } 这个使用MemberExpression : public class HelperClass { public static void Property(Expression<Func> expression) { var body = expression.Body as MemberExpression; if(body == null) […]

“条件表达式中的数据类型不匹配。”错误

我得到“标准表达式中的数据类型不匹配”。 在一个数据库上运行此代码时出错,但它在另一个数据库上运行正常。 当试图将相关表复制到其他数据库并从他运行时程序再次失败! using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Project { public partial class Login : Form { public Login() { InitializeComponent(); } private void Login_Load(object sender, EventArgs e) { } private void label1_Click(object sender, EventArgs e) { } private void LoginButton_Click(object sender, EventArgs […]

LINQ to Entities查询中可重用的谓词表达式

在我们的应用程序中,许多不同查询中出现的一组标准已经慢慢变得更加复杂。 为了避免重复此代码,我想将这些条件拆分为一个方法,该方法将条件作为表达式返回,然后可以在必要时应用它: public Expression<Func> GetComplexPredicate() { // complex predicate is returned as an Expression: return c => … } 重复使用: var result = repository.Invoice.Where(GetComplexPredicate()) 但是,下面的语句不会编译,因为c.Invoice只是一个ICollection 。 var result = repository.Customer .Where(c => c.Country == “US” && c.Invoice.Any(GetComplexPredicate())) 是否可以使用这样的表达式?