我有一个带有两个继承接口的类,你的属性是explicits,因为它们都有一些equals属性,所以,我需要使用LINQ和这个类,但是当我使用&#34时我无法访问explicits属性;选择新的Foo" ......看看案例:
public class QuestaoMontaProva : IQuestao, IExercicio
{
public int Discordo { get; set; }
public int Rever { get; set; }
public int Anotacao { get; set; }
public int Realizada { set; get; }
public int Ativo { set; get; }
int IQuestao.Id { get; set; }
string IQuestao.EnunciadoQuestao { get; set; }
string IQuestao.ExercicioTipo { get; set; }
...
和我的LINQ:
var flags = (from b in dt.AsEnumerable()
select new QuestaoMontaProva
{
IdQuestao = Convert.ToInt32(b["ID_QUESTAO"]), // i can't access this
IdTipoExercicio = Convert.ToInt32(b["ID_TIPOEXERCICIO"]),// i can't access this
Discordo = Convert.ToInt32(b["DISCORDO"]),
Rever = Convert.ToInt32(b["REVER"]),
Anotacao = Convert.ToInt32(b["ANOTACAO"]),
Realizada = Convert.ToInt32(b["REALIZADA"]),
Correta = Convert.ToInt32(b["CORRETA"]),
Ativo = Convert.ToInt32(b["ATIVO"])
}).ToList();
答案 0 :(得分:0)
如果可能,请隐式实现接口,而不是显式实现,Servy suggested。
如果这对您不起作用,请使用此部分的方法语法而不是查询语法,以便您可以包含多行委托而不是单表达式。这使您可以强制转换以访问隐藏的属性。
var flags = dt.AsEnumerable().Select(b =>
{
var q = new QuestaoMontaProva
{
Discordo = Convert.ToInt32(b["DISCORDO"]),
Rever = Convert.ToInt32(b["REVER"]),
Anotacao = Convert.ToInt32(b["ANOTACAO"]),
Realizada = Convert.ToInt32(b["REALIZADA"]),
Correta = Convert.ToInt32(b["CORRETA"]),
Ativo = Convert.ToInt32(b["ATIVO"])
};
var iq = (IQuestao)q;
iq.Id = Convert.ToInt32(b["ID_QUESTAO"]);
iq.ExercicioTipo = Convert.ToInt32(b["ID_TIPOEXERCICIO"]);
return q;
}).ToList();
答案 1 :(得分:0)
您可以为显式接口实现添加支持字段。这样您就可以实现一个接口,并且能够获取/设置值。
var query = from i in items
select new QuestaoMontaProva
{
Id = 1,
IQuestaoId = 2,
IExercicioId = 2
};
public interface IQuestao
{
int Id { get; set; }
}
public interface IExercicio
{
int Id { get; set; }
}
public class QuestaoMontaProva : IQuestao, IExercicio
{
public int Id { get; set; }
public int IQuestaoId { get; set; }
public int IQuestao.Id
{
get
{
return IQuestaoId;
}
set
{
IQuestaoId = value;
}
}
public int IExercicioId { get; set; }
public int IExercicio.Id
{
get
{
return IExercicioId;
}
set
{
IExercicioId = value;
}
}
}
答案 2 :(得分:0)
我找到了一种方法,我只是创建一个代理来使用我班级中接口的属性,看看:
公共课QuestaoMontaProva:IQuestao,IExercicio {
public int Discordo { get; set; }
public int Rever { get; set; }
public int Anotacao { get; set; }
public int Realizada { set; get; }
public int Ativo { set; get; }
public int IdEspecialidade { get; set; }
public string NomeEspecialidade { set; get; }
public string DescricaoAlternativa { set; get; }
public int IdQuestao { get { return (this as IQuestao).Id; } set { (this as IQuestao).Id = value; } }
public int IdTipoExercicio { get { return (this as IQuestao).IdTipoExercicio; } set { (this as IQuestao).IdTipoExercicio = value; } }
public int Correta { get { return (this as IQuestao).Correta; } set { (this as IQuestao).Correta = value; } }
public int Ano { get { return (this as IExercicio).Ano; } set { (this as IExercicio).Ano = value; } }
public int IdExercicio { get { return (this as IExercicio).Id; } set { (this as IExercicio).Id = value; } }
public string NomeExercicio { get { return (this as IExercicio).Nome; } set { (this as IExercicio).Nome = value; } }
public string Regiao { get { return (this as IExercicio).txtRegiao; } set { (this as IExercicio).txtRegiao = value; } }
public string EnunciadoQuestao { get { return (this as IQuestao).EnunciadoQuestao; } set { (this as IQuestao).EnunciadoQuestao = value; } }
public string GuidQuestao { get { return (this as IQuestao).GuidQuestao; } set { (this as IQuestao).GuidQuestao = value; } }
public int IQuestao.Id { get; set; }
string IQuestao.EnunciadoQuestao { get; set; }
string IQuestao.ExercicioTipo { get; set; }
List<Especialidade> IQuestao.Especialidades { get; set; }
... }
这解决了我的问题! 我希望它能帮到所有人......