[英]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.