[英]C# Using a linq query to filter on Values in an Array
我正在努力處理這個查詢數據庫的Linq
查詢。
var roles = _context.Schools
.Select(x =>
new SelectListItem
{
Value = x.SchoolId.ToString(),
Text = x.SchoolNamePostCode
});
我的查詢當前將 Schools 的整行放入SelectListItem
中。 但是,我要做的是添加一個 Where 子句,其中包含一個字符串值 ID 數組。
string[] AssociatedSchoolsArray = AssociatedSchoolIDs.Split(",");
變量AssociatedSchoolsArray
包含一個數組,例如"1","3"
所以在我原來的Linq
查詢中,我只想過濾SchoolIds
1和3的SelectListItem
我怎樣才能做到這一點?
非常感謝
您可以使用 where ,例如;
var roles = _context.Schools
.Where(c=>c.SchoolId == 1 || c.schoolId == 3)
.Select(x =>
new SelectListItem
{
Value = x.SchoolId.ToString(),
Text = x.SchoolNamePostCode
});
或者當然也在之后;
var roles = _context.Schools
.Select(x =>
new SelectListItem
{
Value = x.SchoolId.ToString(),
Text = x.SchoolNamePostCode
})
.Where(c=>c.Value == "1" || c.Value == "3");
基於值列表:
var searchWords = new List<string>(new [] { "1", "2"});
var roles = _context.Schools
.Select(x =>
new SelectListItem
{
Value = x.SchoolId.ToString(),
Text = x.SchoolNamePostCode
})
.Where(c=>searchWords.Contains(c.Value));
筆記; 而不是 contains 你也可以使用.Any()
。 那個更靈活,因為它需要一個委托,但由於.Contains()
是集合 object 固有的方法,它可能會更快。 就 EF 和 linq 到 sql 而言,它們都被轉換為 SQL 查詢,所以我懷疑它是否重要。
.Contains
方法將生成... WHERE column IN (1, 2, 3)
sql 查詢
猜測SchoolId
的類型是int
,因此您需要先將字符串 id 解析為 integer。
var selectedIds = Array.ConvertAll(AssociatedSchoolIDs.Split(","), int.Parse);
var items = _context.Schools
.Where(school => selectedIds.Contains(school.SchoolId))
.Select(school => new SelectListItem
{
Value = x.SchoolId,
Text = x.SchoolNamePostCode
})
.ToArray();
似乎 SchoolId 在數據庫中存儲為 int ,因此您應該在 where 語句之前先轉換為 int 以加快性能。
int[] AssociatedSchoolsArray = AssociatedSchoolIDs.Split(",").Select(item => Int32.Parse(item).ToArray();
var roles = _context.Schools.Where(item => AssociatedSchoolsArray.Contains(item.SchoolId))
.Select(x =>
new SelectListItem
{
Value = x.SchoolId.ToString(),
Text = x.SchoolNamePostCode
});
除了其他很好的答案之外,這是一種使用 LINQ 查詢語法的方法:
var AssociatedSchoolIDs = "1,3";
var selectedIds = AssociatedSchoolIDs
.Split(",")
.Select(x => int.Parse(x));
var roles = (from school
in _context.Schools
where selectedIds.Contains(school.SchoolId)
select new SelectListItem
{
Value = school.SchoolId,
Text = school.SchoolNamePostCode
}).ToArray();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.