簡體   English   中英

Linq To表達式條件比較的實體

[英]Linq To Entities Where Condition to Expressions comparison

我有3個用Entity Framework映射的類

public class A
{
    public string Name { get; set; }
}

public class B
{
    public string Name { get; set; }
    public A A { get; set; }
}

public class C
{
    public string Name { get; set; }
}

我有此條件才能到達實體

return queryableOfB.Where(b => b.A.Name = instanceOfC.Name);

因為這是我邏輯中的重復方法,所以我想創建一個方法為:

protected void GetFilter<B, TBProperty, TCProperty>(
        IQueryable<B> queryofB, C cModel, 
        Expression<Func<B, TBProperty>> bExpression,
        Expression<Func<C, TCProperty>> cExpression)
    {
        var bExpValue = cExpression.Compile()(cModel);
        queryofB.Where(b => b.Property.EndsWith(bExpValue)); // How can I compare two expressions? but adding "for example" an .EndsWith to expression 1?
    }

重要的是不要在表達式中傳遞.EndsWith,因為必須在方法中完成使用EndsWith,StartsWith,Contains或精確比較的決定。

預先感謝古魯斯。

實際上where方法期望的功能是謂詞。 您可以嘗試以下一種。

僅調用where擴展方法就無濟於事。 最好在那里使用方法內聯。 但是告訴你你怎么做。

  static IEnumerable<T1> M<T1>(IEnumerable<T1> objEnumerable, Func<T1, bool> wherePredicate)
  {
      return objEnumerable.Where(predicate);
  }

  // calling like 
  var listOfBObjects = GetBObjectIEnumerable();
  C instanceOfC  = GetCClassObject();
  M<B>(listOfBObjects, b => b.A.Name = instanceOfC.Name);

更新

您可以使用

  M<B>(listOfBObjects, b => b.A.Name.Equals(instanceOfC.Name));
  M<B>(listOfBObjects, b => b.A.Name.StartsWith(instanceOfC.Name));
  M<B>(listOfBObjects, b => b.A.Name.Contains(instanceOfC.Name));

來改善整體性能。 是的,您可以使用IQueryable而不是IEnumerable

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM