我想调用数据的控制器方法,因为可以从不同的表中输出多个数据,因此它取决于用户选择从哪个表中获取输出,所以我想通过单个linq获取输出根据用户选择的表名。
query = (from Ledger in fen.TblLedgers
join acc in fen.Accounts
on Ledger.Code equals acc.AccId
where acc.DrCr == Fin.DRCR && Ledger.Grp == Fin.LedGrp && acc.Vdate <= DateTime.Today && Ledger.isActive == "Y" group acc by new { acc.AccId } into g select g.Sum(acc => acc.Amt)).Sum() ;
答案 0 :(得分:0)
如果你想这样做,一种方法是使用lambdas并实现类似下面的内容。
它的长短 - 你需要利用DbContext.Set&lt; T>方法DbContext.Set method (MSDN)或the generic one (MSDN)
用户选择Vary T(或类型参数),然后是lambda。
但是,为了做到这一点,所有T都需要实现相同的接口,并且在使用它们之前需要将元素强制转换为该接口。但是,如果你想要任何这些东西可以工作,你必须这样做......)
(下面的代码徒手书写,如果出现奇怪的错误,请不要抱怨!)
所以 - 使用类:
public interface IAnimal
{
....
}
public class Dog :IAnimal
{
....
}
public class Cat :IAnimal
{
....
}
public class Cow :IAnimal
{
...
}
您可以使用以下内容:
var userSelection = "Dog";
Type chosenType = chooseTypeAccordingToUserSelection(userSelection);
var animalDBSet = GetOpenDBcontext().Set(chosenType).Cast<IAnimal>();
var insects = animalDBSet.Where(a=>a.NumberOfLegs>4);
HTH!