首页 新闻 会员 周边 捐助

怎么用linq或lambda实现这种包含关系的查询

0
悬赏园豆:50 [已解决问题] 解决于 2015-02-06 09:16

各位好!有个表,叫mail表吧,里面的一个字段MailSend,字符串类型的,它的格式是:“abc@qq.com,ghk@qq.com”,假设所有行的后缀都一样是@qq.com,现在在程序里面用EF查询,

页面就输入这个字段的值,假设我输入"abc"或输入“ghk,abc”,那么能匹配这个“abc@qq.com,ghk@qq.com”

假设我输入“abc,gbc”或输入其他字符,那么不能匹配,查询不出来。给个代码或思路吧

tkfly的主页 tkfly | 初学一级 | 园豆:114
提问于:2015-02-05 18:10
< >
分享
最佳答案
0

建议你直接写sql,然后用EF动态调用。。。

收获园豆:20
幻天芒 | 高人七级 |园豆:37207 | 2015-02-06 09:06
其他回答(3)
0

这是两件事

先说简单一点的,输入abc,匹配abc@qq.com

var query = from c in DataContext.mail

                 where c.MailSend.contains('abc')

至于你要输入"ghk,abc"进行匹配,这个是另外一个题目,你得先把这东西拆成两个单词再进行匹配。

收获园豆:15
爱编程的大叔 | 园豆:30844 (高人七级) | 2015-02-05 19:18
0
public class mail
{
public string MailSend;
}

public mail GetResult(string condition, List<mail> targets)//判断结果是否为空即可
{
string[] conditions = condition.Split(',');
mail firstResult = (mail)from t in targets where t.MailSend.Contains(conditions[0]) select t;
if (firstResult == null)
return null;
foreach (string c in conditions)
{
mail Result = (mail)from t in targets where t.MailSend.Contains(c) select t;
if (!firstResult.MailSend.Equals(Result.MailSend))
{
firstResult = null;
break;
}
}
return (mail)firstResult;
}
收获园豆:15
nicky0227 | 园豆:1069 (小虾三级) | 2015-02-06 00:04
0

这种问题跟EF没有关系,EF最终也是走sql,而且这个问题用sql也不好解决,至少简单的like是解决不了你的问题的,除非你的关键字没有分割的都是一个,所以建议你把关键字分割后一个一个的查询

lawbc | 园豆:63 (初学一级) | 2015-02-13 09:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册