2016-10-07 43 views
1

我不知道如何製作一個動態的Linq查詢。Linq動態命令不工作

這是工作:

var query = from article in context.DP_ARTICLES 
      orderby article.ART_NUM descending 
      select new ArticleItem() { Article = article }; 

但是,這是行不通的:

var query = from article in context.DP_ARTICLES 
      orderby("ART_NUM DESC") 
      select new ArticleItem() { Article = article }; 

編輯:

的目標是爲了一個列表視圖的列,所以在我的方法,我得到的sql列名稱作爲字符串參數(例如ART_NUM)。所以最好的方法是直接在我的查詢中使用它,而不是做一個開關......

+0

https://dynamiclinq.codeplex.com/ – dasblinkenlight

+0

同意,這可能不會編譯。您不能使用字符串文字來標識字段。 –

+3

你爲什麼期望這應該工作? – mybirthname

回答

2

的動態方法纔有效,使用查詢語法時,它不會工作。

var query = context.DP_ARTICLES 
    .OrderBy("ART_NUM DESC") 
    .Select(a => new ArticleItem { Article = a }); 
+0

您是否真的嘗試過?我使用查詢語法運行了一個成功的示例。 – codeConcussion

+1

如果您只是在查詢語法中傳入一個字符串,則當您使用常量進行排序時,實際上不會發生任何事情。它實際上與您將它稱爲'.OrderBy(e =>「ART_NUM DESC」)或甚至是'.OrderBy(e => 1)''相同。 –

+0

Doh,當然。我非常震驚,甚至接受了我沒有注意到它沒有正確排序的事實。 – codeConcussion

0

您需要更改

orderby("ART_NUM DESC")

orderby article.ART_NUM descending

作爲排序依據沒有按」 t接受字符串文字。

+0

這真的很有趣,我沒有親自嘗試。你是否用OP使用的確切(或非常相似)的語法來嘗試它? – Dillanm

+1

好的,我是一個傻瓜。我很驚訝它接受了語法,但它實際上並沒有正確執行排序。 – codeConcussion

+0

在這裏談論Linq.Dynamic.OrderBy,而不是標準的Linq.OrderBy,它接受一個字符串 – Ian

1

如果您的查詢是基於謂詞,那麼你可以做到以下幾點:使用呼叫的方法的語法時

var query = context.DP_ARTICLES; 

if(predicate) 
    query= query.OrderBy(article => article.ART_NUM).AsQueryable(); 
else if(predicate2) 
    query = //Second Order by clause 
.... //More sort options 
else 
    //Default action if needed 

var results = query.select(article => new ArticleItem 
             { 
              Article = article 
             }).ToList(); 
+0

注意,第一個OrderBy將返回OrderedEnumerable ,並且擴展OrderBy需要Queryable 。 –

+0

@JanneMatikainen更新爲可返回查詢 –