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

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

C# 使用字符串參數(shù)來定義對象列表中要過濾的屬性

C# 使用字符串參數(shù)來定義對象列表中要過濾的屬性

C#
幕布斯6054654 2023-09-16 15:07:03
我想使用 filterType 參數(shù)來定義 Stock 對象上要過濾的屬性。[HttpGet("{searchText}/{filterType}")] public async Task<ActionResult<List<Stock>>> Get(string searchText, string filterType) {    List<Stock> v = await this._context.StockView.Where(w => w.[filterType] == searchText).ToListAsync();    return this.Ok(v); }有沒有辦法做到這一點,我可以使用字符串參數(shù)來定義要限制的對象的屬性?
查看完整描述

2 回答

?
慕姐8265434

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

您可以使用表達(dá)式樹動態(tài)構(gòu)建 Linq where 子句來過濾動態(tài)屬性。


我知道這可能需要消化很多東西,但是,就這樣吧。將 StockItem 替換為 StockView DbSet 的類型


[HttpGet("{searchText}/{filterType}")] 

public async Task<ActionResult<List<Stock>>> Get(string searchText, string filterType)

{

    var queryableStockView = this._context.StockView;


    // w =>

    var param = Expression.Parameter(typeof(StockItem), "w");


    var propertyInfo = typeof(StockItem).GetProperty(filterType);

    if (propertyInfo == null)

        throw new Exception($@"Property ""{property}"" was not found");


    // w.[filterType]

    var left = Expression.Property(param, propertyInfo);


    // searchText

    var right = Expression.Constant(searchText, typeof(string));


    // w.[filterType] == searchText

    var expression = Expression.Equal(left, right);

    

    // Bring it all together

    // Where(w => (w.[filterType] == searchText))

    var whereExpression = Expression.Call(

        typeof(Queryable),

        nameof(System.Linq.Enumerable.Where),

        new Type[] { queryableStockView.ElementType },

        queryableStockView.Expression,

        Expression.Lambda<Func<StockItem, bool>>(expression, new ParameterExpression[] { param })

    );


    // Run query against the database                                     

    var filteredItems = queryableStockView.Provider.CreateQuery<StockItem>(whereExpression);


    var v = await filteredItems.ToListAsync();


    return this.Ok(v);

 }

動態(tài)生成的 Linq 表達(dá)式應(yīng)該可以毫無問題地轉(zhuǎn)換為 SQL。


查看完整回答
反對 回復(fù) 2023-09-16
?
12345678_0001

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

要做你想做的事情,你需要編寫一堆映射代碼。(超出范圍,你需要展示你已經(jīng)嘗試過的內(nèi)容)


這樣您就可以動態(tài)設(shè)置字段,執(zhí)行原始 sql 會更容易。


或者,您可以設(shè)置數(shù)據(jù)來支持您的搜索...見下文。


[HttpGet("{searchText}/{filterType}")] 

public async Task<ActionResult<List<Stock>>> Get(string searchText, string filterType)

 {

    var v = await this._context.StockView

              .Where(x => x.Type == filterType 

                       && x.SearchField == searchText).TolistAsync();


    return this.Ok(v);

 }


查看完整回答
反對 回復(fù) 2023-09-16
  • 2 回答
  • 0 關(guān)注
  • 168 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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