我希望EF查询返回整个列,但是我想选择一个带有变量的列。能做到吗即像这样使用变量而不是lambda表达式:
FieldValues = db.PbiData
.Where(x => DatasetList.Contains(x.DatasetId))
.Select(FieldName)
.ToList()
FieldName将始终与PbiData表的列名称之一匹配。例如,第一个FieldName值是“部门”,下面的查询可以正常工作:
FieldValues = db.PbiData
.Where(x => DatasetList.Contains(x.DatasetId))
.Select(x=>x.Department)
.ToList()
每个查询中的where子句仅将返回的数据限制为与当前用户相关的数据。
我的尝试,根据以下评论:
foreach(var F in model.FieldMetaData)
{
if (F.FieldType == "String")
{
PbiFieldData PbiFieldData = new PbiFieldData()
{
FieldName = F.FieldName,
FieldValues = await db.PbiData.Where(x => DatasetList.Contains(x.DatasetId)).Select(F.FieldName).ToListAsync()
};
model.PbiData.Add(PbiFieldData);
};
}
答案 0 :(得分:0)
是的,您可以使用表达式
"SetTable" ->> ["Set", "Table"]
"GetForeignKey" ->> ["Get", "ForeignKey"] //No split on Key!
答案 1 :(得分:0)
您可以为此目的使用System.Linq.Dynamic Nuget
var fieldName = "Department";
var results = context.PbiData
.Where(x=> DatasetList.Contains(x.DatasetId))
.Select(fieldName);
基于评论,可以转换为列表,
var results = await context.PbiData
.Where(x=> DatasetList.Contains(x.DatasetId))
.Select(fieldName).ToListAsync();
答案 2 :(得分:0)
您可以编写本机sql查询:
var FieldValues = ctx.Database.SqlQuery<string>
(
$@"select {fieldName} from PbiData
where DatasetId in ({string.Join(", ", DatasetList.Select(x => $"'{x}'"))})"
).ToList();