asp.net mvc 3 EF HTML MultiSelect - Как получить несколько значений с помощью LINQ - PullRequest
1 голос
/ 29 мая 2011

У меня есть форма расширенного поиска, она содержит поля ввода, раскрывающиеся списки и т. Д. А теперь я хочу изменить раскрывающийся список на список с несколькими выборками.

Я могу настроить представление следующим образом:

@Html.ListBoxFor(model => model.IdState, null, new { size = "7" })

Но я не знаю, как изменить контроллер с:

public ActionResult Index(FormData model)
{
    IQueryable<mytable> results = from s in db.mytable.Include("State").where(s=> (model.IdState != null ? s.IdState == model.IdState : true)) select s;
    return View(result);
}

На множественный результат IdState ???

Ранее IdState был:

int IdState;

Сейчас есть:

IEnumerable<int> IdState;

Спасибо за ваше время!

Я до сих пор не могу заставить его работать.В SQL будет:

SELECT * FROM MyTable WHERE IdState IN (1,2,5,7,10)

Любая идея?http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx Не показывать похожую ситуацию

Обходной путь

Я нашел в этом обсуждении: http://social.msdn.microsoft.com/forums/en-US/adodotnetentityframework/thread/095745fe-dcf0-4142-b684-b7e4a1ab59f0/ этот фрагмент кода:

IQueryable<Foo> foos = context.Foo.Where("it.Id in {1, 2, 3, ...}");

Я изменил на

string sState = "";
foreach (int a in model.IdState ) sState += (a.ToString() + ",");
sState = sState .Substring(0, sState .Length - 1);
IQueryable<mytable> results = from s in db.mytable.Where("it.IdState in {" + sState + "}");

И это прекрасно работает !!!

Я надеюсь, что смогу найти окончательное решение

1 Ответ

1 голос
/ 29 мая 2011

Вместо

s.IdState == model.IdState 

попробуйте использовать

model.IdState.Contains(s.IdState)
...