完全匹配每个ID

时间:2016-07-21 03:00:07

标签: c# sql entity-framework linq entity-framework-6

我需要一个Linq查询,如果并非所有行都在List<string>内为每个hardware_id列匹配字符串,则返回null。

我有下表:

  • id(int) - 主键
  • name(string)
  • user_id(int)
  • hardware_id(int)

我有一个包含短语的List<string>。如果列表中的所有短语在名称行中都有匹配的字符串,我希望查询返回hardare_id编号。如果其中一个短语没有name匹配,则返回null并且如果所有短语的每个hardware_id都存在所有短语,则查询应该返回hardware_id的列表,每个hardware_id的列表,与列表中的所有短语完全匹配。

或者换句话说,返回每个ID的hardware_id列表,其name的所有List<string>public Uri addScheduleToCalender(String title,String place,String description) { long calID = 3; long startMillis = 0; long endMillis = 0; Calendar beginTime = Calendar.getInstance(); beginTime.set(2016, 7, 22, 17, 30); startMillis = beginTime.getTimeInMillis(); Calendar endTime = Calendar.getInstance(); endTime.set(2016, 7, 22, 18, 45); endMillis = endTime.getTimeInMillis(); ContentValues values = new ContentValues(); values.put(CalendarContract.Events.EVENT_LOCATION, place); values.put(CalendarContract.Events.DTSTART, startMillis); values.put(CalendarContract.Events.DTEND, endMillis); values.put(CalendarContract.Events.TITLE, title); values.put(CalendarContract.Events.DESCRIPTION, description); values.put(CalendarContract.Events.CALENDAR_ID, calID); values.put(CalendarContract.Events.EVENT_TIMEZONE, "UTC/GMT +2:00"); Uri uri; if (Build.VERSION.SDK_INT >= 8) { uri = Uri.parse("content://com.android.calendar/events"); } else { uri = Uri.parse("content://calendar/events"); } Uri l_uri = MainActivity.this.getContentResolver() .insert(uri, values); return l_uri; } 中的void setHW(uint32_t val) { uint32_t reg; asm volatile ( mrc 15, 0, %[reg], ... orr %[reg], %[reg], %[val] mcr 15, 0, %[reg], ... :[reg]"=&r"(reg) :[val] "r"(val) : ); } 匹配。

我考虑过在不同的查询中迭代每个Id,但这不是一种有效的方法。也许你知道一个很好的查询来解决这个问题。 我正在使用Entity Framework 6 / C#/ MySQL

注意:查询仅按用户ID进行。所以我先用User Id过滤表,然后找到满足条件的匹配hardare_id。

1 个答案:

答案 0 :(得分:1)

hardware_id上分组,然后查找List

中存在的所有短语
table.GroupBy(x=>x.hardware_id)
     .Where(x=> x.All(s=> phrases.Contains(s.name))
     .Select(x=>x.Key);