如何在LINQ查询中选择现有对象

时间:2018-08-06 09:40:42

标签: c# linq

我有一张公司的桌子

 For the following urls,
 http://localhost:3000/cat/cat1 redirect to 
 http://localhost:3000/cat/cat4 

 http://localhost:3000/cat/cat2 redirect to 
 http://localhost:3000/cat/cat5 

 http://localhost:3000/cat/cat3 redirect to 
 http://localhost:3000/cat/cat6 

然后有一个具有以下结构的对象列表(将其命名为该列表数据集)

CompanyId
CountryId
and so on...

我想做的就是获取上述数据集中存在的所有公司, 所以我想写这样的查询:

Id
CountryId
CurrencyId
TotalCost
and so on...

但这给我一个错误,

  

运算符'=='不能应用于类型为int和List的操作数

如何摆脱这个错误?

4 个答案:

答案 0 :(得分:1)

IEnumerable<Company> companies = db.Companies.Where(a=> dataset.Select(b=>b.CompanyId).Contains(a.CompanyId)).ToList()

尝试此操作,您尝试在单个int变量上使用int ==的列表。

答案 1 :(得分:1)

List<int> companyIds = dataset.Select(a=>a.CompanyId).ToList();
IEnumerable<Company> companies = db.Companies.Where(a=> companyIds.Contains(a.CompanyId));

您可以预先计算要搜索的公司ID,然后使用Contains的{​​{1}}方法来匹配公司ID。

答案 2 :(得分:0)

dataset.Select(a=>a.CompanyId)返回一个List,因此您无法将简单的CompanyId类型int与此List进行比较

您必须检查CompanyId方法是否允许对象Contains进入此列表

var companies = db.Companies.Where(a=> dataset.Select(a=>a.CompanyId).Contains(a.CompanyId))

答案 3 :(得分:0)

您可以像这样使用Contains()

var companies = new List<(int companyid, int countryid, string companyName)>()
{
    (1, 2, "One Incorporated"),
    (2, 5, "Two-two Ltd"),
    (3, 24, "Mr-Three Ltd")
};

var other = new List<(int companyid, string stuff)>()
{
    (1, "asdad"),
    (2, "asdadv")
};

var inOther = companies.Where(x => other.Select(y => y.companyid).Contains(x.companyid));

这将输出“一股份有限公司”和“两二有限公司”。

other.Select(y => y.companyid)获取ID列表,然后Contains()检查x是否存在(x是where语句中的公司)。