【问题标题】:Get value of a column which name is generated at runtime in Linq?获取在 Linq 运行时生成的列的值?
【发布时间】:2018-12-24 00:04:03
【问题描述】:

我有这个问题:

(from mt in edmxObject.MyTable 
 where mt.Field1 != null 
 select mt.Field6)
.Distinct()
.ToList())

还有字段Field2、Field3、Filed4Field5,性质相同。它们包含一个整数,但它们也可以为空。

我想知道某些字段 Field1, Field2, ..., Field5 是否有值或它们有空值。

如果我知道列的名称是一个字符串,例如“FieldX”,它位于集合 (Field1, Field2, ..., Field5) 中,我如何在运行时获取 Linq 查询使用适当的列,然后在我的 edmx 模型上执行它以获取给定字段的值?

【问题讨论】:

标签: c# entity-framework linq edmx


【解决方案1】:

我已经更新了句子,基本上在where分句中添加了我在select中使用的内容。我正在使用反射来访问属性和值。

        string fiealdName = "Field1";
        var neL = l.Where(f => f.GetType()
                                .GetProperty(fiealdName).GetValue(f, null) != null)
                   .Select(f => f.GetType()
                   .GetProperty(fiealdName).GetValue(f, null)
                   .GetValue(f, null))
                   .Distinct()
                   .ToList();

【讨论】:

  • 有用,但实际上我需要将 where 子句替换为可以动态更改名称的列。
  • 您能否也添加一个代码,用于将返回的项目添加到组合框中? Linq 似乎与 System.Reflection.PropertyInfo 混淆了。这是我得到的错误:System.Data.Entity.dll Window_Initialized 中发生“System.NotSupportedException”类型的第一次机会异常:LINQ to Entities 无法识别方法“System.Reflection.PropertyInfo GetProperty(System.String)”方法,并且该方法不能翻译成商店表达式。
  • 您是否使用此查询从数据库中检索数据?
  • 是的,我已经实例化了 edmx 模型的一个对象,并使用该对象访问数据库中的数据。微软 SQL Server 2008
  • 我应该建议您查看here,您必须构建一个 LinQ 表达式来生成 where 条件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-14
  • 1970-01-01
  • 1970-01-01
  • 2012-06-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多