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

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

Net Core:查找類中任何變量字段的數(shù)據(jù)類型

Net Core:查找類中任何變量字段的數(shù)據(jù)類型

C#
MMMHUHU 2023-09-16 17:45:52
如何獲取此 OrderBy 表達(dá)式樹并使其接受任何訂單類型(int、float、string、boolean 等)?是否可以?現(xiàn)在它的類型轉(zhuǎn)換為僅字符串。我應(yīng)該在調(diào)用方法時(shí)將所有內(nèi)容都轉(zhuǎn)換為字符串,還是有更好的方法來使更通用?我只需要 T 類中這個(gè) propertyName 的數(shù)據(jù)類型,這樣我就可以將其放在下面的函數(shù)中。測試這些,還沒有運(yùn)氣。成員類型、GetType()、字段類型Net Core Linq 中的 OrderBy 表達(dá)式樹用于擴(kuò)展方法創(chuàng)建表達(dá)式:public static class ExpressionTreesExtesion{    public static Expression<Func<T,string>> OrderByExpression<T>(this IEnumerable<T> enumerable, string propertyName)    {        var propInfo = typeof(T).GetProperty(propertyName);        var collectionType = typeof(T);        var parameterExpression = Expression.Parameter(collectionType, "x");        var propertyAccess = Expression.MakeMemberAccess(parameterExpression, propInfo);        var orderExpression = Expression.Lambda<Func<T,string>>(propertyAccess, parameterExpression);        return orderExpression;    }}如何致電:var ProductExpression = records.OrderByExpression("Name");var result  = records.OrderBy(ProductExpression.Compile());ProductExpression.Compile() above will compile into x => x.Name, where column name is supplied at the run-time
查看完整描述

1 回答

?
九州編程

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

由于類型在編譯時(shí)未知,因此您將無法使用強(qiáng)類型返回類型,例如Expression<Func<T,TKey>>.


public static class ExpressionTreesExtension {

? ? static readonly Type funcTTResult = typeof(Func<,>);

? ? public static IOrderedQueryable<T> OrderByProperty<T>(this IEnumerable<T> enumerable, string propertyName) {

? ? ? ? var itemType = typeof(T);

? ? ? ? var propertyInfo = itemType.GetProperty(propertyName);

? ? ? ? var propertyType = propertyInfo.PropertyType;

? ? ? ? // Func<T,TPropertyType>

? ? ? ? var delegateType = funcTTResult.MakeGenericType(itemType, propertyType);

? ? ? ? // T x =>

? ? ? ? var parameterExpression = Expression.Parameter(itemType, "x");

? ? ? ? // T x => x.Property

? ? ? ? var propertyAccess = Expression.Property(parameterExpression, propertyInfo);

? ? ? ? // Func<T,TPropertyType> = T x => x.Property

? ? ? ? var keySelector = Expression.Lambda(delegateType, propertyAccess, parameterExpression);


? ? ? ? var query = enumerable.AsQueryable();


? ? ? ? // query.OrderBy(x => x.Property)

? ? ? ? MethodCallExpression orderByExpression = Expression.Call(

? ? ? ? ? ? ?typeof(Queryable),

? ? ? ? ? ? ?"OrderBy",

? ? ? ? ? ? ?new[] { query.ElementType, propertyInfo.PropertyType },

? ? ? ? ? ? ?query.Expression, keySelector);


? ? ? ? // Create an executable query from the expression tree.?

? ? ? ? return (IOrderedQueryable<T>)query.Provider.CreateQuery<T>(orderByExpression);

? ? }

}

并使用像

//IEnumerable<Person>?records...
var?data?=?records.OrderByProperty("Name");


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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