我有一个针对第三方提供的数据库运行的 Linq2SQL 查询。查询的主要部分如下所示:
var valuationQuery =
from v in context.Valuations
where v.ModelId == QualifiedModelId.ModelId
&& v.QualifyModelId == QualifiedModelId.Qualifier
&& v.LanguageCode == QualifiedModelId.LanguageCode
&& v.Edition == Data.Meta.Edition.CurrentEdition.Date
&& v.RegDate == yearReg.RegistrationDate
&& v.ValTypeDescription == "Normal"
&& v.MileageBandID == MileageBand
当我使用 foreach 循环围绕它进行循环时,它会根据最后的选择工作或失败。When the select specifies all the fields like this...
select new
{
v.Value1,
v.Value2,
v.Value3,
... snip ...
v.Value14,
v.Value15,
v.ValueTypeID
};
...它工作正常。当我执行以下操作时,循环会迭代正确的次数,但每次都会带回第一条记录:
select v;
我希望能够在不指定名称的情况下选择所有字段,以防供应商添加更多字段(它们实际上被称为“Value1”到“Value15”),这意味着我可以在我的代码中更改一个常量并更新 DBML 和所有相关代码将从正确数量的字段中查找。这个查询(和类似的)在不同的地方使用,所以我正在寻找未来最少的努力!
我已经运行 SQL Profiler 以确保正在运行的查询返回正确的结果,并且确实如此。
foreach 循环是这样的(转换是由于设计非常糟糕的数据库具有非常不一致的数据类型):
foreach (var record in valuationQuery)
{
int CurrentValType = Convert.ToInt32(record.ValueTypeID);
string FieldName = "Value";
if (MPLower.MileagePointID >= 1 && MPLower.MileagePointID <= MaxMileagePoints)
{
FieldName = "Value" + MPLower.MileagePointID.ToString().Trim();
MPLower.MileagePointPounds[CurrentValType] = Convert.ToInt32(record.GetType().GetProperty(FieldName).GetValue(record, null));
}
if (MPHigher.MileagePointID >= 1 && MPHigher.MileagePointID <= MaxMileagePoints)
{
FieldName = "Value" + MPHigher.MileagePointID.ToString().Trim();
MPHigher.MileagePointPounds[CurrentValType] = Convert.ToInt32(record.GetType().GetProperty(FieldName).GetValue(record, null));
}
}
我是 C# 的新手(我继承了一些代码),所以我意识到这可能是我做过或没做过的愚蠢的事情!请问有人可以帮忙吗?