Mam poniżej kwerendę linq, która pobiera pole tekstowe, które może być Y, N lub DBnull i wypełnia boolean? parametr z wartością True, False lub null w zależności od wartości pola.C# przy użyciu LINQ i Nullable Boolean
var dset = from i in tbdc.Talkbacks
where i.talkback_id == id
select new Talkback(
i.talkback_id, i.acad_period, i.reference,
i.staff_member, i.date_received, i.no_talkers,
i.gender_id, i.names, i.type_id,
i.method_id, i.area_id, i.site_id,
i.category_id, i.date_closed, i.expenddate,
i.acknowledgementtarget,
(i.targetmet == "Y") ? true :
((i.targetmet == "N") ? false : null),
(i.acknowledgementtargetmet != "N") ? true : false
Problematyczny jest to
(i.targetmet == "Y") ? true : ((i.targetmet == "N") ? false : null)
Po zapoznaniu się znalazłem jakąś dokumentację, która stwierdza, że 2 i 3 argumenty inline jeśli trzeba być tego samego typu lub być niejawnie zamienny do jednego inne.
Moje pytanie brzmi: jak obejść to ograniczenie, aby osiągnąć pożądany rezultat?
Jestem stosunkowo nowy w C#, więc nie jestem jeszcze zaznajomiony ze wszystkimi jego dziwactwami/możliwościami.
To działało świetnie Dynami. Mam teraz problem dalej w linii, gdzie próbuję użyć wartość w DisplayTemplate z poniższym kodem: <% @ Control Language = "C#" Dziedziczy = "System.Web.Mvc.ViewUserControl "%> <%: ((Boolean?) Model.Value == True)? "kpi_tick.png": "kpi_cross.png"%> Chodzi o to, że wyświetli on obraz tyknięcia dla prawdziwego, krzyżykowego dla fałszu i brak obrazu dla niezdefiniowanego (jeszcze nie wykonano tego fragmentu kodu) . Otrzymuję błąd "Nazwa" True "nie istnieje w bieżącym kontekście" –
hermiod
Ten znacznik wygląda na ASP.NET, z którym ostatnio dużo współpracowałem. Więc losowe ujęcie w ciemności: zastąp Prawdę prawdą? –
Utwórz klasę statyczną o nazwie BoolHelper za pomocą statycznej metody Bool Parse (string s) zawierającej rozwiązanie Dynami. Następnie użyj tego, aby uprościć rzeczy dla twojego parsera. –