簡體   English   中英

如何返回IEnumerable <T> 使用Datable的價值?

[英]How to return the IEnumerable<T> Value using Datable?

我正在嘗試從IEnumerable類型返回dataTable值任何人都可以幫助我,如果我將為IEnumerable傳遞任何類型,它將返回該值

IEnumerable<T> enrichment = null;
var dataTable = new DataTable();

using (ReconContext context = new ReconContext())
{
    string sql = "SELECT * FROM " + DestinationTable + "  WHERE LoadId =" + ExternalLoadId;

    using (SqlDataAdapter adapater = new SqlDataAdapter(sql, context.Database.Connection.ConnectionString))
    {
        adapater.Fill(dataTable);
    }
}
return enrichment;

首先,除非確實需要,否則不需要使用泛型定義。 在一般情況下,您可以輕松使用DataRow,如下所示;

IEnumerable<DataRow> enrichment = null;
var dataTable = new DataTable();
using (ReconContext context = new ReconContext())
{
    string sql = "SELECT * FROM " + DestinationTable + "  WHERE LoadId =" + ExternalLoadId;

    using (SqlDataAdapter adapater = new SqlDataAdapter(sql, context.Database.Connection.ConnectionString))
    {
        adapater.Fill(dataTable);
    }
}

enrichment = dataTable.AsEnumerable();
return enrichment;

希望這可以幫助。

實體框架已經允許您執行原始SQL查詢,並使用SqlQuery將其結果映射到實體。 您不需要使用原始的ADO.NET。 您可以這樣寫:

public IEnumerable<T> LoadSomeLoads<T>(string table,int loadId)
{
    using (ReconContext context = new ReconContext())
    {
       var sq;="SELECT * FROM "+ table+ "  WHERE LoadId = @p0";
       var results= context.SqlQuery<T>(sql,loadId)
                           .ToArray();
    }
}

您應該驗證table參數以確保它是允許的表名,否則某人可以查詢未經其授權的表,或通過強制表名瀏覽數據。

通過使用參數可以避免災難性的注入攻擊,但是如果有人可以將查詢強制到不合適的表上,那不會阻止未經授權的泄露。

我懷疑雖然您應該尋找每個類型的表繼承。 聽起來您想從不同的表中加載不同的類,其中至少一個屬性(LoadId)是常見的。

通過按類型表, EF將不同類型的繼承層次結構映射到不同的表,並根據映射配置選擇正確的表。

假設,例如,您具有以下類別:

public abstract class LoadTypeBase
{
    public int LoadId { get; set; }
    ...
}

[Table("LoadTableA")]
public class LoadTypeA : LoadTypeBase
{
    ...
}


[Table("LoadTableB")]
public class LoadTypeA : LoadTypeBase
{
    ...
}

和這種情況

public class ReconContext: DbContext
{
    ...
    public DbSet<LoadTypeBase> Loads { get; set; }
}

您可以使用以下命令查詢具有特定LoadId的所有載荷類型:

var query = from someLoad in context.Loads
            where someLoad.LoadId = loadId
            select someLoad;

您可以使用OfType<T>()將結果限制為特定類型

var query = from someLoad in context.Loads.OfType<LoadTypeB>()
            where someLoad.LoadId = loadId
            select someLoad;

是的,這是正確的,但是如果我的功能喜歡這樣,那么我將如何使用數據行,我想輸出將通過的類型,將重新調整類型

 public IEnumerable<T> GeEnrichmendataByTableNameAndLoadId<T>(stringDestinationTable, int ExternalLoadId)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM