Linq加入桌面自定义列表问题?

时间:2014-03-21 12:34:32

标签: c# linq

我有一个简单的联接,我想做,但它不是编译:

    private IEnumerable<decimal> GetSampleListOfIds()
    {
        var samplelList = new List<decimal>
        {
            100200m,
            200200m,
            300200m,
            400200m,
            500200m,
            600200m,
            700200m,
            800200m,
            900200m,
            1000200m,
            1100200m,
            1200200m,
            1300200m,
            1400200m,
            1500200m,
            1600200m,
            1700200m,
            1800200m,
            1900200m,
            2000200m,
        };
        return samplelList;
    }
}

    [Test]
    public void TestGetIds()
    {
        var listOfClientIds = GetSampleListOfIds();

        var resultSet = from c in _container.ClientIDs
                        join l in listOfClientIds on c.ClientGUID == l
                        select c.[some useful attribute]
    }

这基本上是它的要点,但它没有编译'l'和c.ClientGUID是一个可以为空的类型。我尝试了明显的东西,但是我没有从listOfClientIds列表中识别出十进制类型的对象。

我是否需要使用into关键字,我之前已经做过类似的事情,但这确实让我失望。

你能解决这个编译错误吗?我打赌我错过了或做了些蠢事。

2 个答案:

答案 0 :(得分:1)

试试这个:

var resultSet = from c in _container.ClientID
                join l in listOfClientIds on c.ClientGUID equals l
                select c.[some useful attribute]
  

join子句使用。来比较指定的相等键   特殊等于关键字。   (http://msdn.microsoft.com/de-de/library/bb311040.aspx

您也可以不使用加入来执行此操作:

var resultSet = from c in _container.ClientID
                where listOfClientIds.Contains(c.ClientGUID)
                select c.[some useful attribute]

答案 1 :(得分:1)

var resultSet = from c in _container.ClientID
                where listOfClientIds.Any(l => c.ClientGUID.Contains(l))
                select c.[some useful attribute];

注意:我建议你改进命名 - ClientID看起来像单值持有客户端ID(至少不是id序列)。 ClientGUID也看起来像Guid类型的单个值。我希望ClientsIds代替。{/ p>