[英]Entity Framework query table with different name
我有一些完全相同的表(表名除外)。 數據是不同的,並且由於某些特定原因,它們無法合並到一個表中 。
例:
TableA (
Value1 INT NULL,
Value2 INT NULL
)
TableB (
Value1 INT NULL,
Value2 INT NULL
)
.... etc ....
我需要對所有表執行完全相同的復雜計算/操作(完全相同)。 我該如何使用EF?
在傳統的SQL查詢中,我們可以通過更改FROM < 表名 >來構造查詢字符串。 但是我不知道如何用EF做到這一點
注意:EF模型優先方法
提前致謝
這個問題可能是重復的問題。 這里是鏈接,
您可以使用上面的帖子獲取所需的實體列表。
當您擁有所需的實體列表時,請嘗試此查詢
foreach (var table in entities)
{
var record = (from x in table
where x.Value1 == 1
select new CommonTableModel()
{
Value1 = x.Value1 ,
Value2 = x.Value2
}).ToList();
}
Employer
, Customer
從普通的父類) - Person
。 where T : Person
,這樣,您將可以訪問這些方法中兩個類的所有屬性。 實現方式:
public abstract class Person
{
public int Id {get;set;}
public string Name {get;set;}
public int Age {get;set;}
}
public class Employer : Person
{}
public class Customer : Person
{}
public List<T> GetPersonsOlderThan20Years<T>() where T : Person, new()
{
//any common logic
return context.Set<T>().Where(x => x.Age > 20).ToList();
}
用法:
var employers = GetPersonsOlderThan20Years<Employer>();
var customers = GetPersonsOlderThan20Years<Customer>();
創建一個通用實體
對於實體中的特定行
//int id or whatever your [key] attribute is
public T GetSelected<T>(int id) where T : class
{
return _dbContext.Set<T>().FirstOrDefault(x => x.Id == id);
}
var selectedFromEntity1 = GetSelected<Entity1>(idOfEntity1);
var selectedFromEntity2 = GetSelected<Entity2>(idOfEntity2);
對於實體的所有行
public List<T> GetAll<T>() where T : class
{
return _dbContext.Set<T>().ToList();
}
var dataFromEntity1 = GetAll<Entity1>();
var dataFromEntity2 = GetAll<Entity2>();
或者如果您想添加分頁或條件
public IQueryable<T> GetAll<T>()
{
return _dbContext.Set<T>().AsQueryable();
}
var dataFromEntity1 = GetAll<Entity1>();
var resultFrom1 = dataFromEntity1
.Where(x => x.Property1 == "searchFilter") //user input searchFilter
.Skip(pageSize* pageNumber) //user input page size and page number
.Take(pageSize) //user input page size
.ToList();
var dataFromEntity2 = GetAll<Entity2>();
var resultFrom2 = dataFromEntity2
.Where(x => x.Property1 == "searchFilter") //user input searchFilter
.Skip((pageSize * pageNumber)-pageSize) //user input page size and page number
.Take(pageSize) //user input page size
.ToList();
我認為原始查詢是您的煩惱: 原始SQL
因此,您基本上可以:
using (var context = new BloggingContext())
{
var blogs = context.Blogs.SqlQuery("SELECT * FROM dbo.Blogs").ToList();
}
並按照您的建議交換表的名稱。
注意:我還沒有嘗試過,並且確保表必須完全相同(甚至列順序)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.