如何将内存数据与数据库中的数据相交

时间:2016-12-22 16:14:57

标签: c# linq linq-to-entities

我在这里遇到了一些技术挑战。

我有一个包含User类型对象的列表。

现在我必须使用linq执行某项操作,其中来自两个不同表的数据必须与用户名和Id的唯一组合匹配。

这种东西(这不是一个正确的实现)

我现在已经停留了很长时间了。

实际上我不能在这里使用aUser.Contains(),因为它必须是原始类型。

有人可以帮我这个吗?

    IList<User> aUser = GetUser(); // this is a cached data

    class User

    {

    string Username;

    Guid id;

    }

    data = (from v in _dataContext.UserValues
    join i in _dataContext.UserItems
    on v.ItemId equals i.Id
    where (aUser.Contains(v.Id) && aUser.Contains(i.UserName)) 
    select v);

感谢

1 个答案:

答案 0 :(得分:0)

如果您将where子句更改为以下内容,则应该有效...

where (aUser.Select(v => v.id).Contains(v.Id)
    && aUser.Select(v => v.Username).Contains(i.UserName))

顺便说一句,如果你使用方法语法,你可以改进你的Linq,因为你不需要自己加入......

data = _dataContext.UserValues
       .Where(v => aUser.Contains(v.Id)
                && aUser.Contains(v.UserItem.UserName)) 

确切的语法将取决于您的模型的设置方式,因此最后可能需要v.UserItems.UserName,但您应该能够看到如何执行此操作。如您所见,代码更清晰。