首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >创建参数等于对象的LINQ表达式

创建参数等于对象的LINQ表达式
EN

Stack Overflow用户
提问于 2013-04-13 01:58:37
回答 3查看 19.4K关注 0票数 23

给定一个原始值age,我知道如何创建这样的表达式:

代码语言:javascript
复制
//assuming: age is an int or some other primitive type
employee => employee.Age == age

通过这样做:

代码语言:javascript
复制
var entityType = typeof(Employee);
var propertyName = "Age";
int age = 30;
var parameter = Expression.Parameter(entityType, "entity");

var lambda = Expression.Lambda(
        Expression.Equal(
            Expression.Property(parameter, propertyName),
            Expression.Constant(age)
        )                    
    , parameter);

这可以很好地工作,除非所讨论的属性和常量不是基元类型。

如果比较是在对象之间进行的,我该如何构造一个相似的表达式?

使用EF,我可以这样写:

代码语言:javascript
复制
Location location = GetCurrentLocation();
employees = DataContext.Employees.Where(e => e.Location == location);

同样适用于的,但如果我尝试创建相同的表达式:

代码语言:javascript
复制
var entityType = typeof(Employee);
var propertyName = "Location";
var location = GetCurrentLocation();
var parameter = Expression.Parameter(entityType, "entity");

var lambda = Expression.Lambda(
        Expression.Equal(
            Expression.Property(parameter, propertyName),
            Expression.Constant(location)
        )                    
    , parameter);

我得到了一个错误,它说:

Unable to create a constant value of type 'Location'. Only primitive types or enumeration types are supported in this context.

我怀疑Expression.Constant()只需要原始类型,所以我需要使用不同的表达式工厂方法。(maype Expression.Object?-我知道那不存在)

有没有办法创建一个比较对象的表达式?为什么EF能够正确地解释它,如果它是一个编译的LINQ语句,但当它是一个表达式时却不能?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15977908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档