能够有条件地选择要选择的行

时间:2016-02-25 16:48:46

标签: c# entity-framework linq linq-to-entities

这主要是为了了解我是否能找到解决此限制的方法。

我们说我有以下问题:

var query = (from a in db.Table
             where a.CustomFieldId == FieldID && a.ListingId == listingID
             select a.SomeTypeValue);

我正在查询的表是针对可能因类型而异的自定义字段设置的,因此它有多个列,但只使用相应的列来存储基于字段所选类型的值。

该表看起来有点像这样:

enter image description here

我希望能够在不重写整个查询的情况下选择我选择的列。这可能吗?

提前致谢,

1 个答案:

答案 0 :(得分:1)

您的查询可以重新使用"方法调用LINQ":

db.Table
  .Where(a => a.CustomFieldId == FieldID && a.ListingId == listingID)
  .Select(x => x.SomeType);

您可以将查询拆分为Where和Select部分:

var result = whereQuery.Select(x => x.BoolValue);

var result = whereQuery.Select(x => x.IntValue);

您甚至可以将该逻辑封装到方法中:

IEnumerable<T> GetValues<T>() {
  var query = db.Table
      .Where(a => a.CustomFieldId == FieldID && a.ListingId == listingID);

  if (typeof(T)==typeof(bool)) {
    return query.Select(x => x.BoolColumn);
  }
  else if (typeof(T) == typeof(int)) {
    return query.Select(x => x.IntColumn);
  }
  // other types here
}