Как сравнить объект и List <> и object.value null, если значение не существует в списке - PullRequest
0 голосов
/ 03 апреля 2019

Мне нужно сравнить мой объект со списком. Список содержит атрибут «nom_colonne», он заполняется запросом, и в результате получается список атрибутов (такой же, как мой объект AppareilsReparations)

Например: if droit_utilisateur.nom_colonne = "Num_dossier" поэтому я сохраняю значение в arp.num_dossier

Но если у меня нет этого значения в моем списке droit_utilisateur: arp.num_dossier будет нулевым.

Я хотел разыграть объект с помощью System.Collections.IList, но невозможно разыграть. У меня ошибка.

public class AppareilsReparations


{

    public string Num_dossier { get; set; }
    //public string reference_aff { get; set; }
    public int Id { get; set; }
    public Guid Uid { get; set; }
    public string ref_sav { get; set; }

    public CodeDefaut codedefaut { get; set; }
    public CodeSymptome codesymptome { get; set; }
}

public class Droits
{
    public int id { get; set; }
    public int utilisateur_id { get; set; }
    public string nom_table { get; set; }
    public string nom_colonne { get; set; }
}


AppareilsReparations arp = db.Query<AppareilsReparations>
                   ("select * from v_appareils_reparations where ref_sav_client =@ref_sav", new { ref_sav }).SingleOrDefault();

List<Droits> droit_utilisateur = GetDroits("admin");
            //var appareil = new List<AppareilsReparations>();

            IList appareil = (IList)arp;

            var result = droit_utilisateur.Where(x => !appareil.Contains(x.nom_colonne)).ToList();

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Я нашел свою проблему, я публикую свой код для всех:

List<Droits> droit_utilisateur = GetDroits(username);
            Type myType = e.GetType();
            IList<PropertyInfo> props = new List<PropertyInfo>(myType.GetProperties());

            foreach (PropertyInfo prop in e.GetType().GetProperties())
            {
                object propValue = prop.Name;
                if (droit_utilisateur.Any(s => s.nom_colonne.Contains(prop.Name/*, StringComparison.OrdinalIgnoreCase)*/) == false))
                {
                    prop.SetValue(e, Convert.ChangeType(null, prop.PropertyType), null);
                }
            }


                return e;
0 голосов
/ 03 апреля 2019

Это причина того, что AppareilsReparations не является типом IList и, следовательно, ваше приведение всегда будет неудачным IList appareil = (IList)arp;.Возможно, вы хотели сделать, как показано ниже;просто сравнивая с Num_dossier полем AppareilsReparations типа

var result = droit_utilisateur.Where(x => x.nom_colonne == arp.Num_dossier).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...