1

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

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

我的数据库(SQLPlaceALL)返回了 5 行的结果。

  • 地点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
4

2 回答 2

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"])
    };
于 2013-10-24T15:40:05.383 回答
1

你想做一个left join看起来。

这是有关如何执行此操作的 MSDN

这是您的代码修改为与文章类似的内容:

var popPlace = 
    from places in sqlPlaceResults.AsEnumerable()
        join placeAll in sqlPlaceResultsAll.AsEnumerable() 
            on places["PLACEID"] equals placeAll["PLACEID"] into placeAllVals
    from sub in placeAllVals.DefaultIfEmpty()
    select new Place
    {
        PlaceName = regions["NAME"].ToString(),
        PlaceId = (Int32)regions["PLACEID"],
        Ischecked = sub != null
    };
于 2013-10-24T15:39:52.523 回答