当列表中不存在值时如何比较object和List <>和object.value null

时间:2019-04-03 09:52:22

标签: c# list class object compare

我需要在对象和列表之间进行比较。 列表包含属性“ nom_colonne”,它由查询填充,结果是属性列表(类似于我的对象AppareilsReparations)

例如: 如果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 :(得分:0)

这是因为AppareilsReparations不是IList的一种类型,因此您的转换将始终失败IList appareil = (IList)arp;。您可能想做以下事情;只是与Num_dossier类型的AppareilsReparations字段进行比较

var result = droit_utilisateur.Where(x => x.nom_colonne == arp.Num_dossier).ToList();

答案 1 :(得分:0)

我发现了问题,我将代码发布给所有人:

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;