我面臨着同樣的在開發庫存搜索窗口時出現問題。我也在網上搜索了很多,但沒有成功。我已經解決了這個問題如下。
下面是我的搜索窗口:
在這裏你可以看到,有6個組合框和每個有四個選項,如:
<ComboBoxItem IsSelected="True">Contains</ComboBoxItem>
<ComboBoxItem>Does Not Contain</ComboBoxItem>
<ComboBoxItem>Begins With</ComboBoxItem>
<ComboBoxItem>Ends With</ComboBoxItem>
我已經被解決了這個問題將選擇和值存儲在列表中:
public class FilterList
{
public string combobox { get; set; }
public string value { get; set; }
}
在搜索按鈕上點擊:
List<FilterList> filter = new List<FilterList>();
filter.Add(new FilterList { combobox = cmbPart.Text, value = txtPart.Text });
filter.Add(new FilterList { combobox = cmbDescription.Text, value = txtDescription.Text });
filter.Add(new FilterList { combobox = cmbVendor.Text, value = txtVendor.Text });
filter.Add(new FilterList { combobox = cmbVendorPart.Text, value = txtVendorPart.Text });
filter.Add(new FilterList { combobox = cmbManufacture.Text, value = txtManufacture.Text });
filter.Add(new FilterList { combobox = cmbManuPartNumber.Text, value = txtManuPartNumber.Text });
現在在列表中,我列出了所有搜索條件的值。現在我必須從數據庫中過濾記錄。 對於這第一個我是從數據庫中選擇的所有記錄,然後使用交換機根據像列表項:
if (!string.IsNullOrEmpty(filter[0].value))
{
switch (filter[0].combobox)
{
case "Contains":
break;
case "Does Not Contain":
break;
}}
if (!string.IsNullOrEmpty(filter[1].value))
{
switch (filter[1].combobox)
{
case "Contains":
//code
}}
的情況下,你可以它已經從數據庫得到了名單上使用不同的查詢。
總的來說,你可以說在linq中創建運行時查詢是不可能的,就像我們在sql中可以做的那樣。
希望這會幫助你。
這可能有助於http://weblogs.asp.net/scottgu/dynamic-linq-part-1-using-the-linq-dynamic-query-library – 2015-02-24 11:43:17