我想使用Linq2Sql返回包含字符串列表中的值的所有行。 linq2sql類對象具有包含由空格分隔的單詞的字符串屬性。c#使用Linq2Sql查找表列中的匹配詞
public class MyObject
{
public string MyProperty { get; set; }
}
例myProperty的值是:
MyObject1.MyProperty = "text1 text2 text3 text4"
MyObject2.MyProperty = "text2"
例如,使用一個字符串集合,我通過以下列表
var list = new List<>() { "text2", "text4" }
這將在我的例子返回上面兩個項目,他們都包含「text2」值。
但是,我嘗試了下面的代碼,因爲我的擴展方法無法評估Linq2Sql。
public static IQueryable<MyObject> WithProperty(this IQueryable<MyProperty> qry,
IList<string> p)
{
return from t in qry
where t.MyProperty.Contains(p, ' ')
select t;
}
我也寫了一個擴展方法
public static bool Contains(this string str, IList<string> list, char seperator)
{
if (str == null) return false;
if (list == null) return true;
var splitStr = str.Split(new char[] { seperator },
StringSplitOptions.RemoveEmptyEntries);
bool retval = false;
int matches = 0;
foreach (string s in splitStr)
{
foreach (string l in list)
{
if (String.Compare(s, l, true) == 0)
{
retval = true;
matches++;
}
}
}
return retval && (splitStr.Length > 0) && (list.Count == matches);
}
我如何能做到這一點任何幫助或想法?
沒有抱歉,這不起作用。我的自定義Contains方法無效(這只是解釋我在做什麼的一個例子),因爲它不能被賦值,因爲它不能被轉換爲SQL。 – David 2010-04-11 11:54:14
你說得對,我更新了答案。 – 2010-04-11 14:18:26
第二個被剪切的代碼現在可以正常工作,只需使用示例數據庫對其進行測試即可。 – 2010-04-11 14:20:34