I'm doing a query with LINQ
on DataTable
in that snippet of code. I have to check if there is already a link for person registered in the database. My query using LINQ
is working perfectly, the problem is to store query.Count()
in a variable of type int
.
I'm using the Visual Studio 2010 release. I ran the test on the 2013 release and it worked fine. What could be done to store the value of query.Count()
in a variable of type int
or to use in if()
?
//Retorna a relação dos Vinculos contida na base de dados
DataTable PessoasVinculadas = Pessoa.ConsultarPessoasVinculadas(idPessoaReferenciada);
//Procura os registros existentes
var query = PessoasVinculadas.AsEnumerable().Where(x => x.Field<int>("tipo") == TipoVinculo && x.Field<int>("pessoa_referenciada_id")
== idPessoaReferenciada && x.Field<int>("pessoa_vinculada_id") == idPessoaVinculada);
//Conta os registro existentes
int cont = query.Count();
//Se registro for igual a 0 Adicionar
if (cont == 0)
{
//Cria Vinculo
Pessoa.Adicionar(TipoVinculo, idPessoaReferenciada, idPessoaVinculada);
}
Suggested solution
var query = PessoasVinculadas.AsEnumerable()
.Where(x => x.Field<int>("tipo") == TipoVinculo
&& x.Field<int>("pessoa_referenciada_id") == idPessoaReferenciada
&& x.Field<int>("pessoa_vinculada_id") == idPessoaVinculada).ToList();
int cont = query.Count;
Exception message:
System.InvalidCastException was caught
HResult=-2147467262
Message=Conversão especificada não é válida.
Source=System.Data.DataSetExtensions
StackTrace:
em System.Data.DataRowExtensions.UnboxT'1.ValueField(Object value)
em Gerencial.Formularios.Gestao.Licenca.ImportarPessoaVinculo.<>c__DisplayClass5.<backgroundWorker_DoWork>b__0(DataRow x) na C:\Users\mmurta\documents\visual studio 2010\Projects\Gerencial\Gerencial\Formularios\Gestao\Licenca\ImportarPessoaVinculo.cs:linha 240
em System.Linq.Enumerable.WhereEnumerableIterator'1.MoveNext()
em System.Collections.Generic.List'1..ctor(IEnumerable'1 collection)
em System.Linq.Enumerable.ToList[TSource](IEnumerable'1 source)
em Gerencial.Formularios.Gestao.Licenca.ImportarPessoaVinculo.backgroundWorker_DoWork(Object sender, DoWorkEventArgs e) na C:\Users\mmurta\documents\visual studio 2010\Projects\Gerencial\Gerencial\Formularios\Gestao\Licenca\ImportarPessoaVinculo.cs:linha 239
InnerException: