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

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

函數(shù)謂詞到字符串

函數(shù)謂詞到字符串

C#
紅顏莎娜 2022-01-15 15:45:01
我的表達學(xué)習(xí)真的很基礎(chǔ),我有以下函數(shù)謂詞Func<RecordViewModel, Func<ReportModel, bool>> exp = rec => x => x.Firstname == rec.Firstname &&                                                                 x.Surname == rec.Surname;var func = exp(new RecordViewModel() { Firstname= "Peter", Surname  = "Jones" });以下是我的模型和視圖模型,public class ReportModel{    public string Firstname { get; set; }    public string Surname { get; set; }}public class RecordViewModel{    public string Firstname { get; set; }    public string Surname { get; set; }}我想讓表達式序列化為 ((ReportModel.Firstname == "Peter") AndAlso (ReportModel.Surname == "Jones"))。非常感謝任何幫助,
查看完整描述

2 回答

?
阿波羅的戰(zhàn)車

TA貢獻1862條經(jīng)驗 獲得超6個贊

所以,如果我對你的理解正確,你會得到一個Func(在你的例子中稱為 exp),你需要為它提供一個 toString 方法。


你可以使用這樣的東西:


Func<Func<ReportModel, bool>, string> toString = func => 

{

    var vm = ((dynamic)func.Target).rec;

    var paramType = func.Method.GetParameters()[0].ParameterType;

    var firstNameProperty = paramType.GetProperties().First(p => p.Name == nameof(vm.Firstname)).Name;

    var surnameProperty = paramType.GetProperties().First(p => p.Name == nameof(vm.Surname)).Name;

    return $"(({paramType.Name}.{firstNameProperty} == \"{vm.Firstname}\") AndAlso ({paramType.Name}.{surnameProperty} == \"{vm.Surname}\"))";

};


Console.WriteLine(toString(exp(viewModel))); 

//returns ((ReportModel.Firstname == "Peter") AndAlso (ReportModel.Surname == "Jones"))

在那里,您使用一些反射來獲取 func 的參數(shù)(并且您知道它們總是有 1 個)來進行比較。然后根據(jù)名稱查找該參數(shù)的屬性。


還有一個小技巧dynamic可以獲取rec值(您的 RecordViewModel)。它可能很臟,但如果它有效......


而且,顯然,您還對結(jié)果字符串的表示進行了硬編碼。


查看完整回答
反對 回復(fù) 2022-01-15
?
犯罪嫌疑人X

TA貢獻2080條經(jīng)驗 獲得超4個贊

如果你想返回一個字符串,這應(yīng)該是你的表達式:


Func<RecordViewModel, string> exp = rec (x) => return x.Firstname == rec.Firstname &&

         x.Surname == rec.Surname ? "ReportModel.Firstname" + x.Firstname + " " 

         + "ReportModel.Surname" + " "  rec.Surname : string.empty;

然后你可以通過傳入模型來調(diào)用表達式:


var func = exp(new RecordViewModel() { Firstname= "Peter", Surname  = "Jones" });


查看完整回答
反對 回復(fù) 2022-01-15
  • 2 回答
  • 0 關(guān)注
  • 169 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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