SelectListItem和linq any和select语句

时间:2015-12-08 13:47:46

标签: c# .net linq

我的CarFormat对象具有Name和Id属性。我正在获取ClientId等于我传递给内部方法的所有carformats。我这样做

Name

这会返回一个CarFormat对象列表。

此对象具有属性IdmyViewModel.CarFormats = new SelectList(carFormats, "Id", "Name"); 。在我的viewmodel中添加SelectListItem CarFormats作为属性后,我尝试将这个可枚举的资源列表绑定到选择列表

myViewModel.CarFormats = new SelectList(carFormats.First(), "Id", "Name");

但是我得到了数据绑定异常DataBinding:`

  

'System.Collections.ObjectModel.ReadOnlyCollection1 [[xxxxx,xxxxxx,   Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]'没有   包含名称为“Name”的属性。

当我投影只使用列表中的第一项时,一切正常,除了我需要为所有对象而不仅仅是第一项

        <?php
    // 1. Create a database connection
    $mysqli = new mysqli("localhost", "root", "", "us");

    /* check connection */
    if ($mysqli->connect_errno) {
        printf("Connect failed: %s\n", $mysqli->connect_error);
        exit();
    }

    $term = strip_tags(substr($_POST['searchit'],0, 100));
    $term = $mysqli->real_escape_string($term); 

    if($term=="") {
    echo "Enter Something to search";
        exit();
    }


    if(
        $result = $mysqli->query("Select * from table1 where word like '{$term}%'
                        UNION
                        Select * from table2 where word like '{$term}%'")){

       $num_rows = $result->num_rows;
        if(mysqli_num_rows($result) >= 0) {
            while($row = $result->fetch_assoc())
             {
        echo "Stem : {$row['word']} <br>";
    }
    }

        else {
             $result = $mysqli->query("Select * from table3 where words like '{$term}%'");

                    $num_rows = $result->num_rows;
        if(mysqli_num_rows($result) >= 0) {
            while($row = $result->fetch_assoc())
             {
        echo "words: {$row['words']} <br>";
    }
    }
}
}

    else{
     echo "No matches found!";
    }

    ?>

3 个答案:

答案 0 :(得分:2)

将您的查询更改为

 var carFormats = this.carRepository.All()
            .Where(x => x.CarFormat.Any(c => c.Car.Id == someVar.CarId))
            .SelectMany(x=>x.CarFormat).AsEnumerable(); 

使用 SelectMany

一些资源

答案 1 :(得分:0)

您班级中的属性是一个选择列表项:

SelectListItem CarFormats

这就是当你在集合上调用.First()时它的工作原理。

您正尝试使用多个项目的值进行设置:

myViewModel.CarFormats = new SelectList(carFormats, "Id", "Name");

将视图模型类中的属性设置为选择列表:

public SelectList CarFormats { get; set; }

答案 2 :(得分:0)

我认为你错过了.ToList()

myViewModel.CarFormats = new SelectList(carFormats.ToList(),“Id”,“Name”);