小编Las*_*son的帖子

表达式树和AND条件

我正在尝试构建一个过滤器表达式来过滤数据库中的数据.

我编写了以下扩展来动态构建表达式,具体取决于所选的过滤器参数:

public static Expression<Func<T, bool>> And<T>(
        this Expression<Func<T, bool>> leftExpression, 
        Expression<Func<T, bool>> rightExpression)
{
    var invocationExpression = Expression.Invoke(rightExpression, leftExpression.Parameters.Cast<Expression>());
    var andExpression = Expression.Lambda<Func<T, bool>>(
        Expression.AndAlso(leftExpression.Body, invocationExpression), 
        leftExpression.Parameters);

    return andExpression;
}
Run Code Online (Sandbox Code Playgroud)

我正在以这种方式使用它:

Expression<Func<MyObject, bool>> expression = x => true;

if(MyFilter.SomeParam) {
    expression = expression.And(x=>x.MyProperty == MyFilter.SomeParam);
}
Run Code Online (Sandbox Code Playgroud)

它适用于NHibernate,但是当我在Entity Framework 5中使用此代码时,它会失败,并显示以下异常消息:

LINQ to Entities不支持LINQ表达式节点类型"Invoke".

有一种解决方法从数据库中提取整个集合,然后通过IEnumerable.Where(Func<T1, T2> filterClause)它应用过滤条件,但它不需要所有数据只是为了获得一条记录,而Expression<Func<T1, T2>>表达式直接转换为SQL语句.

是否有任何简单的方法可以使此代码与Entity Framework一起使用?

c# filter expression-trees conditional-statements

7
推荐指数
1
解决办法
2348
查看次数

文件如何在低级别复制?

我有一个小问题:

例如,我正在使用.NET Framework中的System.IO.File.Copy()方法.此方法是WinAPI的CopyFile()函数的托管包装器.但CopyFile函数如何工作?它与HDD的固件交互,或者可能通过Assembler或其他一些其他操作执行其他操作......

从最高级别到最低级别看起来如何?

hardware winapi low-level file-copying

3
推荐指数
2
解决办法
993
查看次数

字典和KeyValuePair

我对词典有疑问,希望你能帮助我.

我有以下声明:

class MainCollection<TKey1, TKey2, TValue> : Dictionary<KeyValuePair<TKey1, TKey2>, TValue>
Run Code Online (Sandbox Code Playgroud)

问题是我无法通过TKey1 TKey2 从这本词典中获取一个元素.有没有办法只通过TKey1或TKey2获得一个元素,而不是TKey1和TKey2?

我写了以下代码:

 public TValue GetItemByKey1(TKey1 key)
 {
     MainCollection<int, int, string> Coll = new MainCollection<int, int, string>();
     var value = from s in Coll where s.Key.Key == key select s.Value;
 }
Run Code Online (Sandbox Code Playgroud)

但它已经有两个问题:

  1. 编译错误:s.Key.Key == key => operator ==不能应用于int和TKey1类型
  2. 它看起来很难看.即使编译成功,我也不确定这是获取此类项目的最快方法.我猜词典应该更好.

我该如何解决这些错误?我在这里找不到任何相关的问题.提前致谢!

c# collections dictionary

1
推荐指数
1
解决办法
2400
查看次数