![](/img/trans.png)
[英]How return IEnumerable<T>/IList<T> is null or value using null-coalescing operator
[英]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.