[英]C# Linq to Entity Framework multiple unrelated queries
我遇到需要多個數據庫表中的數據的情況。
表1-具有需要在前端html,角度劍道網格上顯示的列的列表-可通過單獨的Admin配置進行配置。
表2 (某些其他表的聯接)-具有需要在角形前端顯示的數據。
我目前在這里使用的linq如下。
查詢1 :獲取要在網格上顯示的列的列表
var columns = from cols in _context.columns
select cols.colNames;
查詢2 :獲取列表的實際數據
var data = from cust in _context.customer
join details in _context.custDetails on cust.id equals details.custid
join o in _context.orders on cust.id equals o.custid
where cust.id == XXXX
select new Customer
{
Id = cust.Id,
Name = cust.Name,
Address = details.Address,
City = details.City,
State = details.State,
OrderDate = o.OrderDate,
Amount = o.Amount
//15 other properties similarly
};
將IQueryable類型返回給Kendo DataSourceRequest
當前,從我的ui中,我進行了兩個api調用,一個用於列,一個用於獲取實際數據,並顯示/隱藏在columns表中配置的列。
但是問題是,如果有人在網絡或瀏覽器工具上查看api調用,他們可能會看到要隱藏的列返回的數據,這是一個安全問題。
我正在為我的api查找單個查詢,該查詢使用第二個查詢返回數據,該查詢應該足夠聰明以僅發送已配置列(可能有30個不同的列)的數據,並將其他屬性設置為null或不選擇他們。 有些屬性在用於其他目的時總是需要返回。
我搜索了許多資源,以了解如何使用已配置的列生成動態linq select。
請有人幫我解決這個問題
你可以做這樣的事情。 假設您的列表是布爾列Display,則為true時將顯示列,為false時將不顯示。
var columns = (from cols in _context.columns
select cols).ToList(); // note I am getting everything not just column names here...
var data = from cust in _context.customer
join details in _context.custDetails on cust.id equals details.custid
join o in _context.orders on cust.id equals o.custid
where cust.id == XXXX
select new Customer
{
Id = cust.Id,
Name = cust.Name,
Address = details.Address,
City = details.City,
State = details.State,
OrderDate = o.OrderDate,
Amount = o.Amount
//15 other properties similarly
}.ToList();
var fileterdData = from d in data
select new Customer
{
Id = DisplayColumn("ID",columns)? cust.Id:null,
Name = DisplayColumn("Name",columns)? cust.Name:null,
Address = DisplayColumn("Address",columns)? details.Address:null,
// do similarly for all other columns
}.AsQueryable(); // returns IQueryable<Customer>
private bool DisplayColumnn(string columnName,List<Columns> cols)
{
return cols.Where(x=>x.ColumnName==columnName).First().Display();
}
因此,現在您將把此代碼作為一個Web API調用的一部分,該Web API調用將執行兩個SQL調用,一個用於獲取列,另一個用於獲取數據,然后您將使用Linq To Entity過濾器來過濾不需要的列(或希望它們為null )。 將此過濾后的數據返回給UI。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.