[英]what is output type of method when returns result of linq query?
我使用Linq查詢而不是使用Sqlserver的視圖。 我想將其放在方法中。我的輸出類型是什么? 謝謝你的幫助
public ???? InsuranceWorkerView()
{
var InsuranceWorkers =(from ins_insuranceworkers in db.INS_InsuranceWorkers
join dv in db.DivisionCountry on new { InsWorkerCityID = ins_insuranceworkers.InsWorkerCityID } equals new { InsWorkerCityID = dv.DivisionID } into divisioncountry_1_join
from dv in divisioncountry_1_join.DefaultIfEmpty()
join divisioncountry in db.DivisionCountry on new { InsWorkerStateID = ins_insuranceworkers.InsWorkerStateID } equals new { InsWorkerStateID = divisioncountry.DivisionID } into divisioncountry_join
from divisioncountry in divisioncountry_join.DefaultIfEmpty()
select new
{
ins_insuranceworkers.InsWorkerID,
ins_insuranceworkers.InsWorkerCreateUserID,
ins_insuranceworkers.InsWorkerTypeID,
ins_insuranceworkers.InsWorkerFirstName,
ins_insuranceworkers.InsWorkerLastName,
ins_insuranceworkers.InsWorkerNationalCode,
ins_insuranceworkers.InsWorkerMobileNum,
ins_insuranceworkers.InsWorkerAddress,
ins_insuranceworkers.InsWorkerEmail,
City = dv.DivisionName,
State = divisioncountry.DivisionName,
InsWorkerStateID =(Int32?)ins_insuranceworkers.InsWorkerStateID,
InsWorkerCityID = (Int32?)ins_insuranceworkers.InsWorkerCityID
}).ToList();
return InsuranceWorkers;
}
不幸的是,您不能從方法中返回匿名類型 :
您不能將字段,屬性,事件或方法的返回類型聲明為具有匿名類型。 同樣,您不能將方法,屬性,構造函數或索引器的形式參數聲明為具有匿名類型。 要將匿名類型或包含匿名類型的集合作為方法的參數傳遞,可以將參數聲明為類型對象。
因此,要么為此數據創建一些特定類型並返回它:
public List<Foo> InsuranceWorkerView()
{
return (from i in db.INS_InsuranceWorkers
select new Foo {
InsWorkerID = i.InsWorkerID,
InsWorkerCreateUserID = i.InsWorkerCreateUserID
// etc
}).ToList();
}
或返回object
(我發現它沒什么用):
public object InsuranceWorkerView()
{
return (from i in db.INS_InsuranceWorkers
select new {
i.InsWorkerID,
i.InsWorkerCreateUserID
// etc
}).ToList();
}
當動態可能派上用場時就是這種情況。
public IEnumerable<dynamic> InsuranceWorkerView()
{
var InsuranceWorkers =(from ins_insuranceworkers in db.INS_InsuranceWorkers
join dv in db.DivisionCountry on new { InsWorkerCityID = ins_insuranceworkers.InsWorkerCityID } equals new { InsWorkerCityID = dv.DivisionID } into divisioncountry_1_join
from dv in divisioncountry_1_join.DefaultIfEmpty()
join divisioncountry in db.DivisionCountry on new { InsWorkerStateID = ins_insuranceworkers.InsWorkerStateID } equals new { InsWorkerStateID = divisioncountry.DivisionID } into divisioncountry_join
from divisioncountry in divisioncountry_join.DefaultIfEmpty()
select new
{
ins_insuranceworkers.InsWorkerID,
ins_insuranceworkers.InsWorkerCreateUserID,
ins_insuranceworkers.InsWorkerTypeID,
ins_insuranceworkers.InsWorkerFirstName,
ins_insuranceworkers.InsWorkerLastName,
ins_insuranceworkers.InsWorkerNationalCode,
ins_insuranceworkers.InsWorkerMobileNum,
ins_insuranceworkers.InsWorkerAddress,
ins_insuranceworkers.InsWorkerEmail,
City = dv.DivisionName,
State = divisioncountry.DivisionName,
InsWorkerStateID =(Int32?)ins_insuranceworkers.InsWorkerStateID,
InsWorkerCityID = (Int32?)ins_insuranceworkers.InsWorkerCityID
}).ToList();
return InsuranceWorkers;
}
然后,您可以使用類似:
foreach (var worker in InsuranceWorkerView()) {
var id = (int)worker.InsWorkerID;
}
您可以將新列表作為IList返回。
public IList InsuranceWorkerView()
{
var InsuranceWorkers =(from ins_insuranceworkers in db.INS_InsuranceWorkers
join dv in db.DivisionCountry on new { InsWorkerCityID = ins_insuranceworkers.InsWorkerCityID } equals new { InsWorkerCityID = dv.DivisionID } into divisioncountry_1_join
from dv in divisioncountry_1_join.DefaultIfEmpty()
join divisioncountry in db.DivisionCountry on new { InsWorkerStateID = ins_insuranceworkers.InsWorkerStateID } equals new { InsWorkerStateID = divisioncountry.DivisionID } into divisioncountry_join
from divisioncountry in divisioncountry_join.DefaultIfEmpty()
select new
{
ins_insuranceworkers.InsWorkerID,
ins_insuranceworkers.InsWorkerCreateUserID,
ins_insuranceworkers.InsWorkerTypeID,
ins_insuranceworkers.InsWorkerFirstName,
ins_insuranceworkers.InsWorkerLastName,
ins_insuranceworkers.InsWorkerNationalCode,
ins_insuranceworkers.InsWorkerMobileNum,
ins_insuranceworkers.InsWorkerAddress,
ins_insuranceworkers.InsWorkerEmail,
City = dv.DivisionName,
State = divisioncountry.DivisionName,
InsWorkerStateID =(Int32?)ins_insuranceworkers.InsWorkerStateID,
InsWorkerCityID = (Int32?)ins_insuranceworkers.InsWorkerCityID
}).ToList();
並訪問該項目
foreach(var item in InsuranceWorkers)
{
var a= item.InsWorkerID; // to access the anonymous items
}
}
為簡化起見,我建議您創建一種具有所需屬性的POCO類,以便正確表示所需的投影,而不是將其選擇為匿名類型並參與到惱人的危險鑄件中。
創建您的POCO類為:
public class InsuranceWorker
{
public int InsWorkerId {get;set;}
public int InsWorkerCreateUserId {get;set;}
//Keep add the necessary properties here...
}
用法:
將您的匿名選擇( select new
)語句替換為我們上面剛剛創建的已知類型:
select new InsuranceWorker
{
InsWorkerId = ins_insuranceworkers.InsWorkerID,
InsWorkerCreateUserId = ins_insuranceworkers.InsWorkerCreateUserID,
//....
}).ToList();
並返回IList<InsuranceWorker>
:
public IList<InsuranceWorker> InsuranceWorkerView()
{
....
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.