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

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

如何將String轉(zhuǎn)換為其等效的LINQ表達(dá)式樹(shù)?

如何將String轉(zhuǎn)換為其等效的LINQ表達(dá)式樹(shù)?

C#
哈士奇WWW 2019-09-18 14:52:44
這是原始問(wèn)題的簡(jiǎn)化版本。我有一個(gè)名為Person的類:public class Person {  public string Name { get; set; }  public int Age { get; set; }  public int Weight { get; set; }  public DateTime FavouriteDay { get; set; }}......然后說(shuō)一個(gè)例子:var bob = new Person {  Name = "Bob",  Age = 30,  Weight = 213,  FavouriteDay = '1/1/2000'}我想在我最喜歡的文本編輯器中將以下內(nèi)容寫成字符串 ....(Person.Age > 3 AND Person.Weight > 50) OR Person.Age < 3我想取這個(gè)字符串和我的對(duì)象實(shí)例并評(píng)估一個(gè)TRUE或FALSE - 即在對(duì)象實(shí)例上評(píng)估一個(gè)Func <Person,bool>。這是我目前的想法:在ANTLR中實(shí)現(xiàn)基本語(yǔ)法以支持基本比較和邏輯運(yùn)算符。我想在這里復(fù)制Visual Basic優(yōu)先級(jí)和一些功能集:http://msdn.microsoft.com/en-us/library/fw84t893(VS.80).aspx讓ANTLR從提供的字符串中創(chuàng)建合適的AST。使用AST并使用Predicate Builder框架動(dòng)態(tài)創(chuàng)建Func <Person,bool>根據(jù)需要針對(duì)Person實(shí)例評(píng)估謂詞我的問(wèn)題是我完全過(guò)度了嗎?任何替代品?編輯:選擇解決方案我決定使用Dynamic Linq Library,特別是LINQSamples中提供的Dynamic Query類。代碼如下:using System;using System.Linq.Expressions;using System.Linq.Dynamic;namespace ExpressionParser{  class Program  {    public class Person    {      public string Name { get; set; }      public int Age { get; set; }      public int Weight { get; set; }      public DateTime FavouriteDay { get; set; }    }    static void Main()    {      const string exp = @"(Person.Age > 3 AND Person.Weight > 50) OR Person.Age < 3";      var p = Expression.Parameter(typeof(Person), "Person");      var e = System.Linq.Dynamic.DynamicExpression.ParseLambda(new[] { p }, null, exp);      var bob = new Person      {        Name = "Bob",        Age = 30,        Weight = 213,        FavouriteDay = new DateTime(2000,1,1)      };      var result = e.Compile().DynamicInvoke(bob);      Console.WriteLine(result);      Console.ReadKey();    }  }}結(jié)果的類型為System.Boolean,在此實(shí)例中為TRUE。非常感謝Marc Gravell。包括System.Linq.Dynamic nuget包,文檔在這里
查看完整描述

3 回答

?
至尊寶的傳說(shuō)

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

請(qǐng)問(wèn)動(dòng)態(tài)LINQ庫(kù)幫助嗎?特別是,我在考慮作為一個(gè)Where條款。如有必要,將它放在列表/數(shù)組中只是為了調(diào)用.Where(string)它!即


var people = new List<Person> { person };

int match = people.Where(filter).Any();

如果沒(méi)有,編寫一個(gè)解析器(Expression在引擎蓋下使用)并不是很費(fèi)力 - 我在圣誕節(jié)前的火車通勤中寫了一個(gè)類似的(雖然我不認(rèn)為我有源)。


查看完整回答
反對(duì) 回復(fù) 2019-09-18
  • 3 回答
  • 0 關(guān)注
  • 867 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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