How to return all records in a table

1

In my context I have a File table, and another version of the file, so I did with the entity to return a file, and only one version of the file:

 internal Arquivo GetArquivo(string termo)
    {
        using (var ctx = new GEDEntities())
        {
            var arquivo = (from arq in ctx.ARQUIVO
                           where arq.ARQUIVO_GUID == termo
                           || arq.XARQUIVO == termo
                           select new Arquivo()
                           {
                               ARQUIVO_GUID = arq.ARQUIVO_GUID,
                               DIRETORIO_GUID = arq.DIRETORIO_GUID,
                               EXTENSAO = arq.EXTENSAO,
                               IS_STREAM = arq.IS_STREAM,
                               TAG = arq.TAG,
                               TIPO_DE_ARQUIVO_GUID = arq.TIPO_DE_ARQUIVO_GUID,
                               ULT_ARQUIVO_VERSAO_GUID = arq.ULT_ARQUIVO_VERSAO_GUID,
                               URL = arq.URL,
                               XARQUIVO = arq.XARQUIVO,
                           }).FirstOrDefault();
            if (arquivo == null)
                throw new ArquivoException("Arquivo não encontrado");
            arquivo.ArquivoVersoes.Add(GetArquivoVersao(arquivo.ULT_ARQUIVO_VERSAO_GUID));
            return arquivo;
        }
    }

    /// <summary>
    /// 
    /// </summary>
    /// <param name="arquivoVersaoGuid"></param>
    /// <returns></returns>
    internal ArquivoVersao GetArquivoVersao(string arquivoVersaoGuid)
    {
        using (var ctx = new GEDEntities())
        {
            var versao = (from ver in ctx.ARQUIVO_VERSAO
                          where ver.ARQUIVO_VERSAO_GUID == arquivoVersaoGuid
                          select new ArquivoVersao()
                          {
                              ARQUIVO_GUID = ver.ARQUIVO_GUID,
                              ARQUIVO = ver.ARQUIVO,
                              USUARIO_PESSOA_GUID = ver.USUARIO_PESSOA_GUID,
                              TAMANHO = ver.TAMANHO,
                              DATAHORA = ver.DATAHORA,
                              ARQUIVO_VERSAO_GUID = ver.ARQUIVO_VERSAO_GUID
                          }).FirstOrDefault();
            if (versao == null)
                throw new ArquivoException("Versão não encontrada");
            return versao;
        }

Class File

public class Arquivo
{
    public Arquivo() 
    {
        ArquivoVersoes = new List<ArquivoVersao>();
    }
    public string ARQUIVO_GUID { get; set; }
    public string XARQUIVO { get; set; }
    public string TAG { get; set; }
    public string EXTENSAO { get; set; }
    public string URL { get; set; }
    public bool IS_STREAM { get; set; }
    public string ULT_ARQUIVO_VERSAO_GUID { get; set; }
    public string TIPO_DE_ARQUIVO_GUID { get; set; }
    public string DIRETORIO_GUID { get; set; }
    public TipoDeArquivo TipoDeArquivo { get; set; }
    public List<ArquivoVersao> ArquivoVersoes { get; set; } 

Class FileVersion

 public class ArquivoVersao
{    

    public string ARQUIVO_VERSAO_GUID { get; set; }
    public string ARQUIVO_GUID { get; set; }
    public byte[] ARQUIVO { get; set; }
    public string USUARIO_PESSOA_GUID { get; set; }
    public int TAMANHO { get; set; }
    public System.DateTime DATAHORA { get; set; }
}

What would be a method to receive all versions of the files?

    
asked by anonymous 05.02.2015 / 13:26

2 answers

0

You can try the following:

internal ArquivoVersao GetArquivoVersao(string arquivoGuid)
{
    using (var ctx = new GEDEntities())
    {
        var versoes = (
                from ver in ctx.ARQUIVO_VERSAO
                where ver.ARQUIVO_GUID == arquivoGuid
                select new ArquivoVersao()
                {
                    ARQUIVO_GUID = ver.ARQUIVO_GUID,
                    ARQUIVO = ver.ARQUIVO,
                    USUARIO_PESSOA_GUID = ver.USUARIO_PESSOA_GUID,
                    TAMANHO = ver.TAMANHO,
                    DATAHORA = ver.DATAHORA,
                    ARQUIVO_VERSAO_GUID = ver.ARQUIVO_VERSAO_GUID
                }
            ).ToList();
        if (versoes == null)
            throw new ArquivoException("Versão não encontrada");
        return versoes;
    }
}

Another option is to change the GetArchive method and remove the GetFileVersion:

internal Arquivo GetArquivo(string termo)
{
    using (var ctx = new GEDEntities())
    {
        var arquivo = (
            from arq in ctx.ARQUIVO
            join ver in ctx.ARQUIVO_VERSAO on arq.ARQUIVO_GUID equals ver.ARQUIVO_GUID
            where arq.ARQUIVO_GUID == termo || arq.XARQUIVO == termo
            group ver by new {
                ARQUIVO_GUID = arq.ARQUIVO_GUID,
                DIRETORIO_GUID = arq.DIRETORIO_GUID,
                EXTENSAO = arq.EXTENSAO,
                IS_STREAM = arq.IS_STREAM,
                TAG = arq.TAG,
                TIPO_DE_ARQUIVO_GUID = arq.TIPO_DE_ARQUIVO_GUID,
                ULT_ARQUIVO_VERSAO_GUID = arq.ULT_ARQUIVO_VERSAO_GUID,
                URL = arq.URL,
                XARQUIVO = arq.XARQUIVO,
            } into arqVersoes
            select new Arquivo()
            {
                ARQUIVO_GUID = arqVersoes.Key.ARQUIVO_GUID,
                DIRETORIO_GUID = arqVersoes.Key.DIRETORIO_GUID,
                EXTENSAO = arqVersoes.Key.EXTENSAO,
                IS_STREAM = arqVersoes.Key.IS_STREAM,
                TAG = arqVersoes.Key.TAG,
                TIPO_DE_ARQUIVO_GUID = arqVersoes.Key.TIPO_DE_ARQUIVO_GUID,
                ULT_ARQUIVO_VERSAO_GUID = arqVersoes.Key.ULT_ARQUIVO_VERSAO_GUID,
                URL = arqVersoes.Key.URL,
                XARQUIVO = arqVersoes.Key.XARQUIVO,
                ArquivoVersoes = arquivo.toList()
            }).FirstOrDefault();
        if (arquivo == null)
            throw new ArquivoException("Arquivo não encontrado");
        return arquivo;
    }
}

PS: Code not tested.

    
05.02.2015 / 13:58
1

I believe it's exactly how TobyMosque responded, just complementing:

Why not use FirstOrDefault () in this case?

FirstOrDefault () returns the first element of a string or a default value if no element is found.

So, since you need to return a list with all versions, not just one, you can use the ToList () method, which will return a list of versions.

Why change the method signature?

You need to change the signature of your method so that it returns a collection (like a list, see the example below), so that it's in the question will return only one version:

internal List<ArquivoVersao> GetArquivoVersao(string arquivoVersaoGuid)
  

thanks, explain this line too: explain this line pf: from arq in ctx.ARQUIVO join view in ctx.ARQUIVO_VERSAO on arq.ARQUIVO_GUID equals ver.ARQUIVO_GUID

The LINQ join, as well as the SQL language join, joins elements from two collections based on some condition.

In the case of this query, it will be a join of elements of the FILE table with elements of the FILE_TRANSIVE table where the FILE_GUID field of the FILE table is equal to the field FILE_GUID of the FILE_TRANSIVE table.

    
05.02.2015 / 14:08