我有一個SQL表(Product
)是這樣的:獲得價值和實體在條件中使用框架
+----+---------+---------+------+----------------+
| ID |CompanyID| Name | Code | VisibleFields |
+----+---------+---------+------+----------------+
| 1 | 11 | A | C1 | ,1,2, |
+----+---------+---------+------+----------------+
| 2 | 22 | B | C2 | ,2, |
+----+---------+---------+------+----------------+
並有enum
:
public enum Enum_ProductField
{
Name = 1,
Code = 2
}
我在用這個enum
此方法:
public override List<Product> GetListProducts(string Name,string Code)
{
string Name_F = "," + ((int)Product.Enum_ProductField.Name).ToString() + ",";
string Code_F = "," + ((int)Product.Enum_ProductField.Code).ToString() + ",";
List<Product> retVal = null;
using (MarketEntities db = new MarketEntities())
{
retVal = (from P in db.Products
where
(Code == string.Empty || (P.Code == Code && P.VisibleFields.Contains(Code_F))) &&
(Name == string.Empty || (P.Name.Contains(Name) && P.VisibleFields.Contains(Name_F)))
select P).ToList();
}
return retVal;
}
如果我撥打GetListProducts("A", string.empty)
返回產品ID = 1
。
如果我打電話GetListProducts("B", string.Empty)
返回null,因爲產品的VisibleFields
與ID = 2
不存在,1,
,它不應該被顯示。
我想改變GetListProducts
方法和使用Dictionary
爲enum
這樣的:
由1- GetProductFieldAsDictionary
public static Dictionary<T, string> GetProductFieldAsDictionary<T>() where T : struct, IConvertible
{
var visibleFieldsValues = Enum.GetValues(typeof(T)).Cast<T>().ToDictionary(e => e, e => "," + ((int)(object)e).ToString() + ",");
return visibleFieldsValues;
}
創建字典這種方法得到了enum
與Key
返回所有可見字段和Value
。
2-使用GetProductFieldAsDictionary
查詢
public override List<Product> GetListProducts(string Name, string Code)
{
var _ProductFields = ISTIUtility.GetProductFieldAsDictionary<Product.Enum_ProductField>();
List<Product> retVal = null;
using (MarketEntities db = new MarketEntities())
{
retVal = (from P in db.Products
where
(Code == string.Empty || (P.Code == Code && P.VisibleFields.Contains(_ProductFields[Product.Enum_ProductField.Code]))) &&
(Name == string.Empty || (P.Name.Contains(Name) && P.VisibleFields.Contains(_ProductFields[Product.Enum_ProductField.Name])))
select P).ToList();
}
return retVal;
}
,但我得到Run-time error
,因爲我不能在linq
使用Dictionary
像上面的代碼。
我不想在
linq query
之外得到Dictionary
的價值。
我看了很多帖子,但是我沒有找到解決方案。有什麼辦法可以使用這個嗎?
我想在'linq'查詢中做到這一點。否則,我可以用舊的方式做到這一點,我不需要字典!!! –
請看問題的標題。我想在'Where Condition'中做到這一點。 –
你的標題並不是說你想直接在查詢中使用字典,所以......好吧,我不會試圖進行深入的討論,所以答案是沒有簡單的解決方案。也許你可以通過編寫自定義表達式來實現,但我並沒有在你的案例中看到這個問題。 – Reniuz