2016-02-25 37 views
0

這主要是看我是否可以找到解決此限制的方法。能夠有條件地選擇要選擇的行

比方說,我有以下查詢:

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

我查詢的表設置爲可以在類型而有所不同自定義字段,所以它有幾個列,但只使用適當的列來存儲值基於該字段的選擇類型。

表看起來有點像這樣:

enter image description here

我希望能夠選擇我選擇哪一列而無需重寫整個查詢。這可能嗎?

由於提前,

回答

1

您的查詢可以rewrited使用 「方法調用LINQ」:

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

您可以拆分查詢到哪裏,選擇部分則:

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 
} 
+0

非常感謝。我想這顯示了查詢語法的限制。我試圖用查詢語法,但它給了一些編譯錯誤。 –