c#-从func或类似的lambda中提取信息
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-从func或类似的lambda中提取信息,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2079字,纯文字阅读大概需要3分钟。
内容图文
![c#-从func或类似的lambda中提取信息](/upload/InfoBanner/zyjiaocheng/653/af515ed4b688492d8618173dfaace95a.jpg)
我正在尝试构建通用的缓存层. ICache存储库
说我有以下几点:
public class Person
{
public int PersonId { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
public DateTime Added { get; set; }
}
我有这样的事情:
list.Where(x => x.Firstname == "Syska");
在这里,我想提取以上信息,以查看查询是否提供了没有提供的“ PersonId”,因此我不想对其进行缓存.
但是可以说我运行这样的查询:
list.Where(x => x.PersonId == 10);
由于PersonId是我的钥匙,因此我想对其进行缓存.使用“ Person_10”之类的键,以后我可以从缓存中获取它.
我知道有可能使用Expression Func提取信息.但是这样做似乎有很大的开销(运行编译和提取Constant值等时,还有一堆缓存以确保正确解析)
是否有一个框架?还是一些聪明/黄金的方式做到这一点?
更新信息:
我正在使用EF Code First CTP5.
当通过我的存储库访问一个实体并且仅在我的数据类的某些特定属性上查询一个实体时,我想将其保存到缓存中.
所以在做的时候:
repository.SingleOrDefault(x => x.Email == "some@legel.mail");
电子邮件是我对“用户”实体的缓存键,我希望我的存储库对其进行缓存,因为它是由“电子邮件”查询的.
Expression<Func<User, bool>> b;
b.Body // Here I can extract most information without compiling it, to fetch what its being quried for.
并不是我不能创建一个表达式解析器,而是如您所说,在很多情况下,现有的SQL提供程序要好得多.但这不是我要在这里做的.
我简单地想提取BinaryExpression的右侧….最好和最快的方法.由于编译每个查询都很慢.
更好的是,我只想要EF Code First的缓存层.
解决方法:
为了做到这一点,您实际上想要处理Expression< Func< bool,T>.它包含必要的元数据(以表达式对象的形式),使您可以检查查询中实际指定的内容.这就是诸如LINQ-to-SQL和Entity Framework之类的ORM如何将强类型查询表达式转换为它们各自的查询层(LINQ-to-SQL直接转换为SQL,Entity Framework转换为EntitySQL等)的方式.
您可以通过两种方式获取此信息.
>实施IQueryable< T>.这是所有LINQ提供程序(例如上面列出的提供程序)实现的标准查询接口.
>在您的类型上声明一个名为Where的函数,该函数将Expression< Func< bool,T>>作为其论据.
无论哪种方式,您都会得到表达式.然后,您可以对它进行任何操作,包括对其进行编译并将其作为常规代码执行.
如果要开始使用,请前往MSDN并查看.有很多信息,但是应该可以回答您的任何问题.如果没有,您已经知道如何在这里问一个!
内容总结
以上是互联网集市为您收集整理的c#-从func或类似的lambda中提取信息全部内容,希望文章能够帮你解决c#-从func或类似的lambda中提取信息所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。