class Person
{
public int Id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
}
class Program
{
static void Main(string[] args)
{
Expression<Func<Person, object>> expression = exp => new { exp.Id };
if (條件1)
{
expression = exp => new { exp.Name };
}
if (條件2)
{
expression = exp => new { exp.Address };
}
expression = exp => new { exp.Id, exp.Name, exp.Address };
Console.WriteLine("Hello World!");
Console.ReadLine();
}
}
動態拼接Expression
最終實作效果:
expression = exp => new { exp.Id, exp.Name, exp.Address };
uj5u.com熱心網友回復:
去研究一下運算式樹Expression,肯定能解決你的問題。但我覺得意義不大。我在專案實戰中,沒有碰到過有這種需求,或者說,這種需求感太微弱,你不就是多取出一兩個列嗎,又不是什么大事。為了這個,你可能還得把linq寫的更復雜,可能還會丟失強型別(比如你最終可能得用字串來表達列,那和寫sql沒差別了,是退步),你還得面對你想取的列來自于不同的多表join的情況下,實作可能會很繁瑣。
所以沒有必要了。既然已經是面向物件的編程,你拿到了這個物件,你就得接受這個物件的所有屬性。不能說你拿到這個物件然后說,你把我什么什么屬性去掉吧,這也做不到。
接受就好。
uj5u.com熱心網友回復:
學、玩兒一個東西跟推出一個暢銷產品,往往差10年經驗,往往就在幾百個分寸之間。uj5u.com熱心網友回復:
這個 expression 無能為力new { exp.Id, exp.Name, exp.Address };
這個是C#編譯器的語法糖。
相當于C#定義了一個類
class xxx //實際上會是一個奇怪的名字
{
public int id { get; set; }
public string name { get;set;}
public string address { get;set;}
}
而
new { exp.Id, exp.Name, exp.Address };
其實是
new xxx { id=exp.Id, name=exp.Name, address=exp.Address };
而expression是運行時執行的,它創造不出型別來。
uj5u.com熱心網友回復:
先說說你的實際需求。轉載請註明出處,本文鏈接:https://www.uj5u.com/net/29693.html
標籤:C#
