C # Lambda Expression Mapping Несколько условий - PullRequest
5 голосов
/ 22 октября 2010

Я использую Enterprise Library. Я хочу отобразить столбец (целочисленного типа) в Enum Type.

Say

Enum BloodGroup Type
{

  OPositive,
  ONegative,
  ABPositive,
  ABNegative,  
  BPositive,
  BNegative,
  NotSet 
} 

Я сопоставляю столбец таблицы базы данных со свойствами C # Types (Class Employee).

IRowMapper<Employee> addressMapper = MapBuilder<Employee>
                .MapAllProperties()   // map all properties
                .Map(p=>p.BloodGroup)  // override BloodGroup property
                .WithFunc(rec => rec.IsDBNull(rec.GetOrdinal("BloodGroup"))
                ? BloodGroup.NotSet
                : BloodGroup.OPositive)
                .Build();

Код работает нормально, но я хочу отобразить несколько условий Enum в WithFun Метод расширения. Я имею в виду что-то вроде

.WithFun(rec=> rec.IsDBNull(rec.GetOrdinal("BloodGroup")) ?   BloodGroup.NotSet
               rec.GetOrdinal("BloodGroup")==1 ?BloodGroup.OPositive
               rec.GetOrdinal("BloodGroup")==2 ?BloodGroup.ONegative
         )

Помогите мне проверить несколько условий?

Ответы [ 3 ]

2 голосов
/ 22 октября 2010
rec.IsDBNull(rec.GetOrdinal("BloodGroup")) ? BloodGroup.NotSet :
rec.GetOrdinal("BloodGroup")==1 ? BloodGroup.OPositive :
rec.GetOrdinal("BloodGroup")==2 ? BloodGroup.ONegative :
BloodGroup.NotSet

Все, что вам нужно добавить, это несколько двоеточий и последнее выражение else.См троичный оператор .

1 голос
/ 22 октября 2010

Попробуйте что-нибудь подобное.Используя этот код, вы создаете анонимную функцию, которая должна касаться записи только один раз, что повышает общую эффективность.Это также легче читать, если вы знакомы с лямбда-приведением и вызовом.Абстрагирование этой лямбды в общую функцию int-to-Enum было бы оптимальным.

1 голос
/ 22 октября 2010

использование

 .WithFunc((rec) => {
 if(rec.IsDBNull(rec.GetOrdinal("BloodGroup"))
    return BloodGroup.NotSet;
 else if(rec.GetOrdinal("BloodGroup")==1)
   return BloodGroup.OPositive;
 else if(rec.GetOrdinal("BloodGroup")==2)
    return BloodGroup.ONegative;
   ..... // you get the idea        
 })
 . // rest

По сути, вы можете использовать фигурные скобки для определения вашей функции. В качестве альтернативы вы можете создать функцию и использовать ее в Func.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...