繁体   English   中英

LINQ to SQL自定义属性查询where子句

[英]LINQ to SQL Custom Property query on where clause

我正在使用LINQ to SQL类,并扩展了一个(带有部分类)并添加了额外的属性。 我想查询该属性,因此:

(from p in db.TableName where p.CustomProperty=="value" select p)

但是,这不起作用。 我收到一个错误: The member 'TableName.CustomProperty' has no supported translation to SQL 目前,我不确定自定义属性的“设置”部分中没有代码。

因此,基本上,可以使用LINQ to SQL查询的Custom Property,如何?

作为后续:该CustomProperty不是表中的一列。 它是一个单独的值,但是我既要获取它(足够简单),又要查询它!

如您所知,没有任何魔术,因此基本上会有两个查询:第一个是具有数据库条件的SQL查询,并且在其结果上应将您的自定义条件用作第二个查询。

因此,您可以使用的解决方法是像这样显式拆分两个部分:

var dbFetch = (from p in db.TableName where p.RealProperty ==" value" select p).ToArray();
var result = from p in dbFetch where p.CustomProperty == "value" select p;

但是,您当然会遇到一些限制。 例如,如果您逐页获取结果,则第二个条件将中断分页,因为它执行了其他过滤。

高温超导

它被称为LINQ to SQL。 只是为了避免误会。

关于您的问题:您是否已使用设计器添加了该属性? 之后,您是否重新创建了数据库?

如果您手动完成此操作,请确保您有一个私有存储字段(例如_CustomProperty),并且您的属性(CustomProperty)被标记为ColumnAttribute,例如

private string _CustomProperty;

[Column(Storage="_CustomProperty", CanBeNull=true)]
public string CustomProperty
{
    get { return _CustomProperty; }
}

希望这可以帮助。

您不是在那儿错过了平等标志吗? 在C#中,相等用双等号表示,如“ a == b ”,而单等号表示赋值,如“ obj.SomeProp = 5; ”。

我已经实现了一个系统,您可以在其中查询手动添加的属性,这些属性表示数据库列中整数属性周围的枚举包装。 因此,我知道这是可能的,并且看起来您可能想做类似的事情。 但是,我这样做的方法并不容易,除非您正在构建要在许多情况下正确使用的框架,否则最好使用archimed7592建议的解决方案。 我目前没有方便的代码,所以我无法提供所有详细信息,但简要地说,我的解决方案就是这样。 我创建了一个自定义LINQ提供程序,以取代LINQ-to-SQL提供程序。 为此,我实现了一个自定义IQueryable接口,该接口返回了我的LINQ提供程序,而不是LINQ-to-SQL提供的接口。 然后,在采用表达式对象的函数中,我对表达式进行了预处理,然后返回结果。 我用整数属性和整数值之间的比较替换了枚举类型属性和枚举值之间的所有比较,然后将该表达式传递给普通的LINQ-to-SQL实现以返回结果。 由于表达式是只读的,因此我必须做一个(递归)函数,用替换的自定义部分重建整个表达式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM