第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

LINQ操作員之間

LINQ操作員之間

慕尼黑8549860 2019-11-14 09:30:06
以下內(nèi)容適用于IEnumerable類型,但是有什么方法可以針對sql數(shù)據(jù)庫使用類似IQueryable的類型呢?class Program{    static void Main(string[] args)    {        var items = new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, };        foreach (var item in items.Where(i => i.Between(2, 6)))            Console.WriteLine(item);    }}static class Ext{   public static bool Between<T>(this T source, T low, T high) where T : IComparable   {       return source.CompareTo(low) >= 0 && source.CompareTo(high) <= 0;   }}
查看完整描述

1 回答

?
蝴蝶不菲

TA貢獻(xiàn)1810條經(jīng)驗 獲得超4個贊

如果將其表示為where子句,則可以使用LINQ to SQL開箱即用,如果可以構(gòu)造適當(dāng)?shù)谋磉_(dá)式。


就表達(dá)式樹而言,可能有一種更好的方法-Marc Gravell可能會改進(jìn)它-但值得一試。


static class Ext

{

   public static IQueryable<TSource> Between<TSource, TKey>

        (this IQueryable<TSource> source, 

         Expression<Func<TSource, TKey>> keySelector,

         TKey low, TKey high) where TKey : IComparable<TKey>

   {

       Expression key = Expression.Invoke(keySelector, 

            keySelector.Parameters.ToArray());

       Expression lowerBound = Expression.GreaterThanOrEqual

           (key, Expression.Constant(low));

       Expression upperBound = Expression.LessThanOrEqual

           (key, Expression.Constant(high));

       Expression and = Expression.AndAlso(lowerBound, upperBound);

       Expression<Func<TSource, bool>> lambda = 

           Expression.Lambda<Func<TSource, bool>>(and, keySelector.Parameters);

       return source.Where(lambda);

   }

}

不過,這可能取決于所涉及的類型-特別是,我使用了比較運算符而不是IComparable<T>。我懷疑這更有可能正確地轉(zhuǎn)換為SQL,但是您可以根據(jù)需要將其更改為使用該CompareTo方法。


像這樣調(diào)用它:


var query = db.People.Between(person => person.Age, 18, 21);


查看完整回答
反對 回復(fù) 2019-11-14
  • 1 回答
  • 0 關(guān)注
  • 370 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號