Linq2Sql Where()子句基于逗号分隔值的字符串

时间:2013-12-15 17:16:53

标签: linq-to-sql

这是场景:

我有一张桌子,让我们说Users。每个用户都有以下列:IDTypeID

我有一个逗号分隔的字符串,用户为ID个数字"1,2,3,4,5"

我想知道,我如何实现 - 通过linq2sql - 如果我基于该字符串,检查用户是否具有相同的TypeID值?

2 个答案:

答案 0 :(得分:3)

将该列表分解为值集合,并使用该集合使用TypeID检查Contains()是否在其中。

var numbers = "1,2,3,4,5";
var typeIds = numbers.Split(',')
    .Select(n => Convert.ToInt32(n))
    .ToList();

var query =
    from user in db.Users
    where typeIds.Contains(user.TypeID)
    select user;

答案 1 :(得分:0)

也许我没有理解你的问题,因为你已经接受了杰夫的答案,或者你可能没有理解他的答案,因为它没有做到我的意思以为你想要。我的理解是你的字符串是一个ID列表,你想知道具有这些ID的用户是否都具有相同的TypeID。这是一种方法(使用LinqToObject测试,但应该在LinqToSQL中很好地翻译)

bool sameTypeID = (from user in users
                   where str.Split(',').Select(x => int.Parse(x)).Contains(user.ID)
                   group user.ID by user.TypeID into g
                   select g).Count() == 1;