填充对象,其中包含来自另一个列表的值

时间:2013-10-24 15:35:43

标签: c# linq

在我的对象中,我有3个属性:

    public String PlaceName{ get; set; }
    public Int32 PlaceId { get; set; }
    public Boolean IsChecked { get; set; }

我有一个结果,从我的数据库返回5行(SQLPlaceALL)。

  • 放置A
  • 地方B
  • 放置C
  • 放置D
  • 放置E

我总是希望显示这5个结果。但是,当我选择联系人时,该联系人可能会在返回的结果中有一个或多个这些位置(sqlPlaceResults)。

  • 地方B
  • 放置C
  • 放置D

        var popPlace = from places in sqlPlaceResults.AsEnumerable()
                         join placeAll in sqlPlaceResultsAll.AsEnumerable() 
                            on places["PLACEID"] equals placeAll["PLACEID"]
                           select new Place
                           {
                               PlaceName = places["NAME"].ToString(),
                               PlaceId = (Int32)places["PLACEID"],
                               Ischecked = true
                           };
    

当我这样做时,popPlace只包含sqlPlaceResults包含的3个项目。我希望我的显示器做这样的事情:

  • 放置A
  • 地点B - 已检查
  • 地点C - 已检查
  • 放置D - 已检查
  • 放置E

2 个答案:

答案 0 :(得分:1)

你想看似{.1}}。

Here is an MSDN on how to do this

以下是您的代码修改为与文章相似的内容:

left join

答案 1 :(得分:1)

这样的事情应该有效。您想要查询所有地点,并根据是否有匹配的IsChecked设置sqlPlaceResults

var popPlace = 
    from placeAll in sqlPlaceResultsAll.AsEnumerable()
    select new Place
    {
        placeName = regions["NAME"].ToString(),
        PlaceId = (Int32)regions["PLACEID"],
        Ischecked = sqlPlaceResults.AsEnumerable().Any(
            places => places["PLACEID"] == placeAll["PLACEID"])
    };